Laravel Join:试图获取非对象的属性

Posted

技术标签:

【中文标题】Laravel Join:试图获取非对象的属性【英文标题】:Laravel Join : Trying to get property of non-object 【发布时间】:2016-12-20 11:31:34 【问题描述】:

我正在尝试加入两个表。但它给出了一个错误“试图获取非对象的属性”...... 这是查看页面中的代码:

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

【问题讨论】:

查询一定失败,因此$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 也是空的,因为它在匿名函数中。试试:function($join) use ($id) 【参考方案1】:

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 是一个variable,你应该不使用' ' 或者使用" "

我认为这行得通!

【讨论】:

您的更正是正确的,但现在它给出了错误“未定义的变量:id”。我尝试将 $id 作为参数传递但失败了。 $id 用于代码的上段,没有任何错误。 $id 是一个variable,你在哪里设置这个variable 的值。你能显示更多代码吗? @DhrubaChakraborty ***.com/questions/29548073/… 我找到了它: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 吗?【参考方案2】:

我无法找出加入的问题,以另一种方式解决。

 $question = DB::table('question')
                ->where('ques_id' , $id)
                ->first();
 $user = \App\User::find($question->id);

虽然不满意,但完成了工作。

【讨论】:

【参考方案3】:

您可以使用简单的连接:

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

【讨论】:

以上是关于Laravel Join:试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

试图获取非对象的属性 [laravel 5.2]

Laravel 5.6 - “试图获取非对象的属性”

试图在 laravel 5.5 中获取非对象的属性

Laravel 问题-“试图获取非对象的属性”

Laravel:试图获取非对象的属性

Laravel 属于试图获取非对象的属性