[英]In Laravel Eloquent, select “whereIn” from parent table
在我的Laravel项目(带有MySQL数据库)中,我有一些模型: Time Entries , Tasks和Projects 。
时间条目属于任务
任务属于项目
因此,每个表都包含一列为其父级的对应ID。
我有一个项目 ID数组,我试图选择通过其任务属于这些项目的时间条目 。
换句话说,我希望能够执行以下操作:
$timeEntries = TimeEntry::whereIn('project_id',$projectIds)->get();
但是很明显,我遇到了“列未找到”错误,因为我在时间条目表中得到的只是task_id而不是project_id 。
有没有一种方法可以在单个口才查询中选择所需的时间条目(基于我拥有的项目ID)? 帮助非常感谢。
在您的项目模型中添加以下方法
public function timeEntries()
{
return $this->hasManyThrough('App\TimeEntry' , 'App\Task');
}
现在您可以获取一个项目的所有时间条目,如下所示
$project = Project::find(id);
$project->timeEntries()->get();
因此,您要说明的关系类型是直通关系( http://laravel.com/docs/5.1/eloquent-relationships#has-many-through )。
不要试图从项目->任务-> time_entries中拖下树,而是尝试抬头。
Projects::whereIn($projectIds)->with('time_entries')->get();
最终的集合将是每个项目中具有(至少应有)一个名为time_entries的字段的项目,这些字段具有所有相关时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.