Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.2紧急加载不工作_Php_Laravel_Laravel 5_Laravel 5.2_Eager Loading - Fatal编程技术网

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嵌套的即时加载将导致null
user
,因为在嵌套的即时加载时,首先生成查询,然后执行查询。这将导致$This变为null,因此不会有
$This->user\u type
使if语句始终为false,从而导致错误或null user。这是因为您以错误的方式定义了您的关系,看看为什么不尝试使用('answers.user')->first()
这将让用户获得所有答案loaded@FabioAntunes嵌套的即时加载将导致null
user
,因为在嵌套的即时加载时,首先生成查询,然后执行查询。这将导致$This变为null,因此不会有使if语句始终为false并作为默认值的
$This->user\u type
结果错误或空用户。这是因为您以错误的方式定义了您的关系,看看我知道这会起作用,但这真的是一个好答案吗?查询将加倍。由于用户id属于教师或学生,因此其中一个将被额外查询。我知道这会起作用,但这真的是一个好答案吗?The查询将加倍。因为用户id属于教师或学生,因此其中一个将被额外查询。