gpt4 book ai didi

laravel - 多级关系 whereHas on eloquent Model in Laravel

转载 作者:行者123 更新时间:2023-12-03 23:29:48 25 4
gpt4 key购买 nike

我想找到
项目::with('tasks.tags')->get();

只有在结果集中具有特定标签 ID 的项目才会返回。

例如。我想找到一个包含任务和标签的任务只有 id 为 1 的项目。换句话说,在项目 - 任务关系中过滤任务返回。

我尝试了各种方法,但到目前为止都失败了。

我试过了:

$project = Project::with('tasks.tags')->whereHas('tasks', function($query){
$query->whereHas('tags', function($query) {
$query->where('id', 1);
});
})->get();

还有:

$project = Project::with('tasks.tags')->whereHas('tasks', function($query){
$query->whereHas('tags', function($query) {
$query->where('tag_id', 1);
});
})->get();

这是建立关系的方式:

在 Project.php 中

public function tasks()
{
return $this->hasMany(Task::class, 'project_id')->setEagerLoads([]);
}

在Task.php中

public function tags()
{
return $this->morphToMany(Tag::class, 'taggable')->setEagerLoads([]);

}

注意Task和Tags之间的关系是morphToMany。

任何指针?

最佳答案

您还需要确定预加载的范围。像下面这样的东西应该可以工作:

$project = Project::with(['tasks.tags' => function ($query) {
$query->where('id', 1);
}])->whereHas('tasks', function ($query) {
$query->whereHas('tags', function ($query) {
$query->where('id', 1);
});
})->get();

关于laravel - 多级关系 whereHas on eloquent Model in Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51112218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com