查询在 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';
我有一个看起来像这样的函数:
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';