在Laravel Eloquent中,从父表中选择“whereIn”

时间:2015-07-09 16:57:22

标签: php mysql laravel eloquent laravel-5

在我的Laravel项目(使用MySQL数据库)中,我有几个模型:时间条目任务项目

时间条目属于任务

任务属于项目

因此每个表都包含其父对应ID的列。

我有一系列项目 ID,我正在尝试选择时间条目,它们通过任务属于那些项目

换句话说,我希望能够做到这样的事情:

$timeEntries = TimeEntry::whereIn('project_id',$projectIds)->get();

但显然,我收到了一个未找到列的错误,因为我在时间条目表中的所有内容都是 task_id 而不是 project_id

有没有办法在单个Eloquent查询中选择所需的时间条目(基于我拥有的项目ID)?非常感谢。

2 个答案:

答案 0 :(得分:1)

在项目模型中添加以下方法

public function timeEntries()
{
    return $this->hasManyThrough('App\TimeEntry' , 'App\Task');
}

现在您可以获得项目的所有时间条目,如下所示

$project = Project::find(id);
$project->timeEntries()->get();

答案 1 :(得分:0)

因此,您解释的关系类型是关系(http://laravel.com/docs/5.1/eloquent-relationships#has-many-through)。

而不是试图从项目 - >任务 - > time_entries向下抬头看树。

Projects::whereIn($projectIds)->with('time_entries')->get();

生成的集合将是具有(应该至少)每个项目中具有所有相关时间的名为time_entries的字段的项目。