我在使用查询构建器时遇到问题,这些构建器在路径文件中使用post()
时给出了未定义的方法错误。
通常我使用
的返回User::find($id)->post;
但是当我将post
作为一个函数调用时,它不起作用并给我:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: post()
用户模型
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
protected function post()
{
return $this->hasOne('App\Post');
}
}
路线
Route::get('/', function () {
return view('welcome');
});
Route::get('/user/{id}/post',function($id){
return User::find($id)->post()->get();
});
答案 0 :(得分:2)
User类中的post()
方法需要公开。现在它受到保护,这意味着外面的课程无法访问它。
答案 1 :(得分:2)
User类中的post()方法需要公开。现在它受到保护,这意味着外面的课程无法访问它。 〜@ jackel414
正如Jackel414所述,您的post()
功能受到保护,需要公开才能访问它。
我注意到您在一对一的关系中运行get()
函数,此函数旨在恢复数据集合,除非您将id作为参数传递,它是&#39;使用以下示例的最佳做法:
return User::find($id)->post;
或者
return User::with('post')->find($id);
或者,您可以带回构建器以进一步扩展您的查询。
return User::find($id)->post();
答案 2 :(得分:0)
试试这个:
<强>路线强>
Route::get('/user/{id}/post',function($id){
return User::with('post')->find($id);
});