查询在 Laravel 内的函数中不起作用,但在其他地方起作用

Queries not working in a function within Laravel, but works in other places

我有一个看起来像这样的函数:

  public function update() {
      $reports = Reports::find(1);
      return $reports;
  }

但是这个函数没有返回任何东西。然而,报告 table 确实有一个 pkey 为 1:

的元素
INSERT INTO `theDatabase`.`reports` (`pkey`, `id`, `comment`, `youtubeUrl`, `displayName`, `profilePictureUrl`, `approvalStatus`, `rep`, `created_at`, `updated_at`) VALUES (1, '1234567890', 'This is just a test report', 'https://example.com', 'Test User', 'https://example.com/somethingsomething', '0', '1', '2015-02-22 00:00:00', '2015-02-22 00:00:00')

如果在同一个函数中我改为执行 ::all 我会收到以下回复:

[{"pkey":1,"id":"1234567890","comment":"This is just a test report","youtubeUrl":"https:\/\/youtube.com\/watch?32222","displayName":"Test User","profilePictureUrl":"https:\/\/google.com\/somethingsomething","approvalStatus":0,"rep":1,"created_at":"2015-02-22 00:00:00","updated_at":"2015-02-22 00:00:00"},{"pkey":4,"id":"12345678903","comment":"This is just a test report","youtubeUrl":"https:\/\/youtube.com\/watch?32222","displayName":"Test User","profilePictureUrl":"https:\/\/google.com\/somethingsomething","approvalStatus":1,"rep":1,"created_at":"2015-02-22 00:00:00","updated_at":"2015-02-22 00:00:00"}]

就是这个代码:

  public function update() {
      $reports = Reports::all();
      return $reports;
  }

所以我有点困惑为什么这不能正常工作。还;控制器中的另一个功能正在使用查询,并且可以毫无问题地返回正确的输出。这是另一个函数的代码:

 public function index() {
      $reports = Reports::all()->where('approvalStatus', '=', 0);

      return view('reports.index', compact('reports'));
  }

我想知道我在这里做错了什么?作为旁注,这是通过 post 请求调用的,其路由如下所示:

Route::post('reports/update', 'ReportsController@update');

怀疑很重要,但额外的信息也无妨。

::find(1) returns 之后执行 dd($reports) 输出如下:

undefined: {undefined: -909362565, " ": null}
" ": null
undefined: -909362565

编辑评论:

  $reports = Reports::where("pkey",1);
  dd($reports);
  return $reports;

得到这个:

ErrorException in Response.php line 406:
Object of class Illuminate\Database\Eloquent\Builder could not be converted to string

0: {undefined: {undefined: 2,…}, Protected property: false}
Protected property: false
undefined: {undefined: 2,…}
Protected property: " class=sf-dump-note>Application</abbr> {<a class=sf-dump-ref href=#sf-dump-748334229-ref22 title="
undefined: 2
1: 3
2: {undefined: 2,…}
3: "Protected property"
4: false

我更改了我的架构,因此 pkey 现在被命名为 id,而我的旧 id 列现在被命名为 profileId。我猜 find() 正在使用 id 作为主键字段。

Eloquent默认使用id作为主键,find方法是通过主键查找记录。但是,如果您有不同的架构,则可以更改主键名称。在 Eloquent 模型中,您可以指定:

protected $primaryKey = 'pkey';

现在 find 将使用 pkey 作为主键。

您也可以手动设置您的 table 名称,以防它不是 reports,例如 reporting_system:

protected $table = 'reporting_system';