没有不值得去解决的问题,也没有不值得去学习的技术!

Add Constraints to Nested Eager Loading in Laravel 9

The generated SQL is as follows, which meets expectations

1. The existing implementation is as follows; it is a nested eager load, and the SQL is as follows:

PHP

return $builder->distinct()->with('items.orderItem')->get();

2. Now we need to add a constraint to items. The final implementation is as follows:

PHP

        // return $builder->distinct()->with('items.orderItem')->get();
        return $builder->distinct()->with(['items' => function ($query) {
            $query->whereRaw('(signed_quantity + signed_damaged_quantity) < return_quantity');
        }, 'items.orderItem'])
            ->get();

3. The generated SQL is as follows, which meets expectations. See Figure 1.

The generated SQL is as follows, which meets expectations
Figure 1
SQL

select
  *
from
  `items`
where
  `items`.`return_order_id` in (230)
  and (signed_quantity + signed_damaged_quantity) < return_quantity
  and `items`.`deleted_at_gmt` is null

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系