Php Laravel 5.2紧急加载不工作
这就是我正在做的Php Laravel 5.2紧急加载不工作,php,laravel,laravel-5,laravel-5.2,eager-loading,Php,Laravel,Laravel 5,Laravel 5.2,Eager Loading,这就是我正在做的 $question = ForumQuestion::where('link',$ques)->with('answers')->first(); $answers = $question->answers; $answers->load('user'); //return $answers; return view('forum.question', compact('question','answers')); $answers->load('us
$question = ForumQuestion::where('link',$ques)->with('answers')->first();
$answers = $question->answers;
$answers->load('user');
//return $answers;
return view('forum.question', compact('question','answers'));
$answers->load('user')代码>急切加载答案的相应用户
public function user()
{
if ($this->user_type == 'student') {
return $this->belongsTo(Student::class, 'user_id');
}else{
return $this->belongsTo(Teacher::class, 'user_id');
}
}
但问题是$this->user\u类型会得到某种类型的静态数据。如果我的第一个答案是user\u type='teacher'
,那么在每个查询中,它都假设它是teacher
,即使它在一段时间内更改为student
。
为什么是静态的?如果我不急于加载,它会工作得很好。如果您将急于加载更改为两个不同的类别,而不是将所有内容都放在用户函数中,该怎么办
public function student() {
return $this->belongsTo(Student::class, 'user_id');
}
public function teacher() {
return $this->belongsTo(Teacher::class, 'user_id');
}
如果你真的想做一个if语句,从一个不同的函数调用它,比如user。希望这会有所帮助。如果您将您的即时加载更改为两个不同的类别,而不是将所有内容放在用户函数中,该怎么办
public function student() {
return $this->belongsTo(Student::class, 'user_id');
}
public function teacher() {
return $this->belongsTo(Teacher::class, 'user_id');
}
如果你真的想做一个if语句,从一个不同的函数调用它,比如user。希望这能有所帮助。为什么不尝试使用('answers.user')->first()进行嵌套的即时加载呢代码>这将获得用户的所有答案loaded@FabioAntunes嵌套的即时加载将导致nulluser
,因为在嵌套的即时加载时,首先生成查询,然后执行查询。这将导致$This变为null,因此不会有$This->user\u type
使if语句始终为false,从而导致错误或null user。这是因为您以错误的方式定义了您的关系,看看为什么不尝试使用('answers.user')->first()
这将让用户获得所有答案loaded@FabioAntunes嵌套的即时加载将导致nulluser
,因为在嵌套的即时加载时,首先生成查询,然后执行查询。这将导致$This变为null,因此不会有使if语句始终为false并作为默认值的$This->user\u type
结果错误或空用户。这是因为您以错误的方式定义了您的关系,看看我知道这会起作用,但这真的是一个好答案吗?查询将加倍。由于用户id属于教师或学生,因此其中一个将被额外查询。我知道这会起作用,但这真的是一个好答案吗?The查询将加倍。因为用户id属于教师或学生,因此其中一个将被额外查询。