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

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是否内置了去重的功能?

阅读 6.8k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题