laravel Eloquent 多个字段关联同一个表后的重复查询问题

发布于 2022-09-06 02:38:09 字数 1003 浏览 17 评论 0

laravel Eloquent 多个字段关联同一个表后的重复查询是否可以进一步优化?

class Bill extends Model
{
    /**
     * 与经办人关联关系
     */
    public function operateUser()
    {
        return $this->belongsTo('App\Models\User', 'operate_user_id');
    }

    /**
     * 与制单人关联关系
     */
    public function docomentUser()
    {
        return $this->belongsTo('App\Models\User', 'document_user_id');
    }

    /**
     * 与审核人关联关系
     */
    public function checkUser()
    {
        return $this->belongsTo('App\Models\User', 'check_user_id');
    }
}

查询语句示例

$bills = BillModel::with('operateUser', 'docomentUser', 'checkUser'])->find(1);

operate_user_id,document_user_id,check_user_id 都是 1的时候,会产生三条相同的sql语句

select * from `users` where `users`.`id` in ('1') and `users`.`deleted_at` is null

感觉这个挺浪费的,如果能够进行相同语句判断,然后只查询一次就好了;

刚用laravel时间还不久,不知laravel是否内置了去重的功能?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽心 2022-09-13 02:38:09

没太听懂你到底想怎么去重。如果你分别调用三个函数,那肯定要查询三次,因为和users表关联的是三个字段,无论如何你都至少要bills.a = 1/bills.b = 1/bills.c = 1查询三个字段。这三个是不同的字段,不可能去重的,你获取的是bills和users关联的数据,不光是users表的数据。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文