laravel关联查询

注意:跨库关联查询必须用with

一对一参考文档https://www.kancloud.cn/baidu/laravel5/2948

定义一对一关联

一对一关联是很基本的关联。例如一个 退换货申请单 =OrderMainReturnApplyModel模型会对应到一个 order Eloquent 里可以像下面这样定义关联:

class OrderMainReturnApplyModel extends ApiBaseModel

{

    /**

     * 关联配货商品详情

     */  

    public function order()

    {

        return $this->hasOne('App\Models\OrderMainModel','om_sn','order_main')->select('*');

    }

}

传到 hasOne 方法里的第一个参数是关联模型的类名称。定义好关联之后,就可以使用 Eloquent 的动态属性取得关联对象:

$orderReturn = $orderReturn->with(['order' => function($query)use($value){

     $query->where('types', $value);

    }]);

$value是查询总订单里面的条件不是退换货申请单

定义相对的关联

要在 OrderMainModel模型里定义相对的关联,可以使用 belongsTo 方法类似

 

 

一对多

一对多关联的例子如,一个包裹订单可能「有很多」配货单中包含的商品信息。可以像这样定义关联:

class OrderMainDeliveryModel extends ApiBaseModel

{

    /**

     * 关联查询配货单信息详情

     */

    public function deliveryInfo()

    {

        return $this->hasMany( 'App\Models\OrderMainDeliveryInfoModel' , 'order_main_delivery' , 'omd_sn' );

}

}

使用方法:

$orderDeliveryModel->with(‘'deliveryInfo'’)->where($condition)->select('*')->first();

 

预载入巢状关联:

$books = OrderMainDeliveryModel ::with(deliveryInfo.goods)->get();

注意:OrderMainDeliveryInfoModel必须存在goods

查询:

$data = array_filter($data);

$endArr = [];

$orderReturn = $this->orderReturnModel;

foreach ($data as $key => $value) {

if ($key == 'goods_name') {

$orderReturn = $orderReturn->with(['ecmGoods' => function($query)use($value){

     $query->where('goods_name', 'like', "%{$value}%");

     }]);

}elseif($key == 'user_name'){

$orderReturn = $orderReturn->with(['member' => function($query)use($value){

     $query->where('user_name', 'like', "%{$value}%");

     }]);

}elseif($key == 'order_type'){

$orderReturn = $orderReturn->with(['order' => function($query)use($value){

     $query->where('types', $value);

     }]);

}else{

$orderReturn = $orderReturn->where($key,$value);

}

}

$endArr = $orderReturn->first();

$endArr['search_params'] = $data;

return $endArr;

 

 

转载于:https://www.cnblogs.com/lyx32609/p/10550422.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值