Laravel加入:试图获得非对象的属性

时间:2016-08-13 17:08:20

标签: php laravel join

我想加入两张桌子。但它给出了一个错误“试图获得非对象的属性”...... 这是视图页面中的代码:

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文档那样做。为什么会出现这个问题?

3 个答案:

答案 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 :(得分: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();

但是如果你想让事情变得简单,你应该用他们的关系来定义你的实体(UserQuestion):

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(不是用户)。