注意:跨库关联查询必须用with
定义一对一关联
一对一关联是很基本的关联。例如一个 退换货申请单 =》 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;