sti*_*edo 3 laravel eloquent laravel-5 laravel-5.6
我想找到
Project::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();
Run Code Online (Sandbox Code Playgroud)
和:
$project = Project::with('tasks.tags')->whereHas('tasks', function($query){
$query->whereHas('tags', function($query) {
$query->where('tag_id', 1);
});
})->get();
Run Code Online (Sandbox Code Playgroud)
这是建立关系的方式:
在 Project.php 中
public function tasks()
{
return $this->hasMany(Task::class, 'project_id')->setEagerLoads([]);
}
Run Code Online (Sandbox Code Playgroud)
在 Task.php 中
public function tags()
{
return $this->morphToMany(Tag::class, 'taggable')->setEagerLoads([]);
}
Run Code Online (Sandbox Code Playgroud)
注意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();
Run Code Online (Sandbox Code Playgroud)
Project::with(['tasks' => function($q) {
$q->whereHas('tags', function($query) {
$query->where('tag_id', 1);
});
}])->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3126 次 |
| 最近记录: |