Php Laravel Join:尝试获取非对象的属性
我想加入两张桌子。但它给出了一个错误“试图获取非对象的属性”。。。 这是查看页面中的代码:Php Laravel Join:尝试获取非对象的属性,php,laravel,join,Php,Laravel,Join,我想加入两张桌子。但它给出了一个错误“试图获取非对象的属性”。。。 这是查看页面中的代码: Asked by {{$user->name}} 在我的控制器中,我有这样的代码 $user = DB::table('users') ->join('question', function ($join) { $join ->on('question.id', '=', 'users.id')
Asked by {{$user->name}}
在我的控制器中,我有这样的代码
$user = DB::table('users')
->join('question', function ($join) {
$join ->on('question.id', '=', 'users.id')
->where('question.ques_id' , '=', '$id');
})
->get();
我试着像laravel文档那样做。为什么会出现这个问题?
join
是方法的名称,您应该让它像一样小写(查看高级join语句
)
顺便说一句,$id
是一个变量
您应该将其保留为不带'
或使用'
我认为这是工作 我在join中找不出问题所在,用另一种方法解决了
$question = DB::table('question')
->where('ques_id' , $id)
->first();
$user = \App\User::find($question->id);
这并不令人满意,但完成了任务。您可以使用一个简单的连接:
$user=DB::table('users'))
->join('question','question.id','=','users.id')
->其中('question.ques_id','=',$id);
->第一()
->get();
但是如果你想让事情简单化,你应该用它们的关系来定义你的实体(User
和Question
):
类问题扩展模型
{
受保护的$table='question';
受保护的$primaryKey='ques_id';
公共函数用户()
{
返回$this->belongsTo(用户::类,'id');
}
}
并保持控制器代码简单:
$user=Question::find($id)->user;
注意:
你应该给东西起个正名。当我看到question.id
时,我认为这是问题的id(不是用户)。查询一定失败了,因此$user
没有设置为任何值,也肯定不是我尝试选择的对象。它不起作用。如何将任何内容设置为$user$user=DB::table('users')->Join('question',function($Join){$Join->on('question.id','=','users.id')->where('question.ques_id','=','$id');})->select('users.name')->get()Join
应该是小写的,'$id'
不带'
--$id
也为空,因为它位于匿名函数中。Try:函数($join)使用($id){
您的更正是正确的,但现在它给出了一个错误“Undefined variable:id”。我尝试将$id作为参数传递,但失败。$id用于代码的上段,没有任何错误。$id
是一个变量
,您在哪里为该变量
设置值。可以显示更多代码吗?@DhrubaChakraborty我发现它:D用于匿名函数是的,现在参数已传递,但仍然存在该问题“正在尝试获取非对象的属性”。:($user=DB::table('users')->join('question',function($join)use($id){$join->on('question.id','=','users.id')->where('question.ques_id','=',$id);})->get();@DhrubaChakraborty你能帮我dd
这个$user
吗?
$question = DB::table('question')
->where('ques_id' , $id)
->first();
$user = \App\User::find($question->id);