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();
但如果你想让事情变得简单,你应该用它们的关系来定义你的实体(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(不是用户)。
【讨论】:
以上是关于Laravel Join:试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章