模型层关联

12 篇文章 0 订阅

以一对一为例,先说一下with如何使用

一、最简单的,直接model->with('details')->get();

只要在对应的model写上details方法

public function details()
{
    return $this->hasOne('App\Models\Admin\Business','id');
}

 这个表示当前model表数据每条的business_id对应Business表的id,即一对一的关系

二、如何用with带条件筛选呢 或者指定关联查询的字段呢

有两种方式,根据自己的需求选择

1. 不影响主表查询条数,只筛选关联表的查询结果

$list = $this->ServiceModel->where($where)->with(['business' => function ($query) use ($name,$phone) {
            $where = [];
            if(!empty($name)){
                $where['name'] = $name;
            }
            if(!empty($phone)){
                $where['phone'] = $phone;
            }
            $query->where($where);
            $query->select('id', 'name', 'phone');
        }])->paginate($this->pageSize, ['*'], 'page', $page);

以上查询结果:列表总条数不变,但不满足条件的查询出来的business为null

如图所示

 

 

2. 可作为搜索,只查询满足条件的条数,不满足条件的关联主表也不查询出来

$query = $this->ServiceModel->where($where);
$query->with(['business' => function($query1){
    $query1->select('id', 'name', 'phone');
}]);
$query->whereHas('business', function (Builder $query2) use ($name,$phone) {
            $where = [];
            if(!empty($name)){
                $where['name'] = $name;
            }
            if(!empty($phone)){
                $where['phone'] = $phone;
            }
            $query2->where($where);
        });
$list = $query->paginate($this->pageSize, ['*'], 'page', $page);

上面结果如图所示

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值