laravel 一对一 一对多 with 关联查询

注意:跨库关联查询必须用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;

 

 

你可能感兴趣的:(PHP,PHP,laravel,with,has)