laravel eager loading使用嵌套关系中的父列值

时间:2016-12-22 14:29:46

标签: laravel eloquent eager-loading

这是我的方案,我有2个表OrdersEmployees。它们有很多关系,所以有一个数据透视表来连接它们。 Order表包含一些字段,例如datein_timeoute_time等。

现在我想让所有员工在本周内获得订单。我可以用

轻松完成
$orders = Order::with(['employees'])
               ->currentWeek($fromDate, $tillDate)
               ->get()
               ->groupBy('date');

此处currentWeekscope,其中计算了日期范围。我需要做的是与同一日期所有orders的员工建立嵌套关系,例如

$orders = Order::with(['employees' => function ($q) {
            $q->with(['orders' => function ($q) {
                $q->where('child_order.date', '=', 'parent_order.date');
            }]);
          }])->currentWeek($fromDate, $tillDate)->get()->groupBy('date');

如何在嵌套?

中访问parent orders columns

实施例: Order表包含2个字段in_timeout_time。我的目的是在一周内列出所有订单,并让所有已添加到订单的员工。同时,我需要确定员工是否已添加到订单 in_time / out_time 冲突。比如,我在 dec-22 上有一个订单,从 3-30pm 开始,到晚上9:30 结束。现在,我需要列出该订单的所有员工,并列出与日期匹配的每个员工的所有订单,并且属于` in_time / out_time

1 个答案:

答案 0 :(得分:0)

这可能无法为您提供您想要的确切答案,但是您是否尝试使用Employee模型解决问题?如果您要使用员工的模型及其订单关系,您可以查询它。像这样

$orders = Employee::with('orders')
    ->whereHas(['orders' => function ($q) {
        $q->where('date', '<', $tillDate);
        $q->where('date', '>', $fromDate);
    })->get();

这也意味着您需要在Employees模型上拥有hasMany关系,如此

员工模型

public function orders()
{
    return $this->hasMany(Order::class);
}

根据您在评论中描述的情景,这将为您提供5名员工的集合,以及他们在日期之间所做的任何订单。