Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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
Laravel 为什么相关的答案模型没有获得项目id?_Laravel_Eloquent - Fatal编程技术网

Laravel 为什么相关的答案模型没有获得项目id?

Laravel 为什么相关的答案模型没有获得项目id?,laravel,eloquent,Laravel,Eloquent,我有以下几种型号: Project <(Many to Many)> Experiment (One to Many)> Question (One to Many)> Answer 如果我添加下一个条件,它就是工作: Project::with['experiments.questions.answers'=>函数$query{$query->where'Project_id',1;}]->find1 但是我如何才能从代码中删除它并使其成为全局性的呢?试试这段代码 P

我有以下几种型号:

Project <(Many to Many)> Experiment (One to Many)> Question (One to Many)> Answer
如果我添加下一个条件,它就是工作: Project::with['experiments.questions.answers'=>函数$query{$query->where'Project_id',1;}]->find1

但是我如何才能从代码中删除它并使其成为全局性的呢?

试试这段代码

Project::with('experiments.questions.answers')->find([1])

我不明白为什么这个选择会影响其他项目,但是,如果您想创建一个方便的快捷方式来获取具有关系的项目-在模型或存储库中创建一个方法:

public function findWithExperiments($id) {
    $project = Project::find($id);
    $project->load(['experiments.questions.answers' => function ($query) use ($id) {
        $query->where('project_id', $id);
    }]);

    return $project;
}

我明白了,这是因为一个实验可以同时涉及id为1的项目和id为2的项目。当你抓到这个实验的时候,你也抓到了第二个项目的问题和答案!Laravel关系不是这样工作的,您必须手动指定这样的特殊情况。