我想加入两张桌子。但它给出了一个错误“试图获得非对象的属性”...... 这是视图页面中的代码:
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文档那样做。为什么会出现这个问题?
答案 0 :(得分:3)
join
是您应该lower-case
Laravel Document Advanced Join Statements
的方法名称(查看$user = DB::table('users')
->join('question', function ($join) {
$join->on('question.id', '=', 'users.id')
->where('question.ques_id' , '=', $id);
})
->get();
)
$id
btw variable
是' '
你应该在没有" "
或使用{{1}}
我认为这项工作!
答案 1 :(得分:1)
我无法弄清楚加入中的问题,以另一种方式做到了。
$question = DB::table('question')
->where('ques_id' , $id)
->first();
$user = \App\User::find($question->id);
这并不令人满意,但完成了工作。
答案 2 :(得分:1)
您可以使用简单的联接:
$user = DB::table('users')
->join('question', 'question.id', '=', 'users.id')
->where('question.ques_id' , '=', $id);
->first()
->get();
但是如果你想让事情变得简单,你应该用他们的关系来定义你的实体(User
和Question
):
Class Question extends Model
{
protected $table = 'question';
protected $primaryKey = 'ques_id';
public function user()
{
return $this->belongsTo(User::class, 'id');
}
}
保持控制器代码简单:
$user = Question::find($id)->user;
注意:强>
你应该给出正确的名字。当我看到question.id
时,我认为这是问题的ID(不是用户)。