1. 程式人生 > >記錄一個laravel中閉合orwhere和when的例子

記錄一個laravel中閉合orwhere和when的例子

想要查詢的情況

SELECT * FROM orders AS o JOIN orders_extend oe ON o.`id` = oe.`order_id`
 WHERE (o.`seller_id` = 1 AND o.`order_status` = 'shipments' AND oe.`delivery_phone`= '15088888888') OR 
 (o.`order_status` = 'pay'  AND   o.`seller_id` = 1)

laravel/lumen

 public function getAssOrderList($sellerId
,$assId,$assPhone)
{
//判斷當前人員是否是管理員 $ass = new SellerAssistants(); $boolMaster = $ass->where([ ['seller_id','=',$sellerId], ['assistant_id','=',$assId], ['status','=','1'] ])->value('is_master'); $oT = Orders::TABLE_NAME; $o_eT
= OrderExtend::TABLE_NAME; $model = new Orders(); $orderIds = $model->join($o_eT,$oT.'.id','=',$o_eT.'.order_id') ->where(function ($query) use ($sellerId,$oT,$o_eT,$assPhone,$boolMaster){ $query->where([ [$oT.'.seller_id'
,$sellerId], [$oT.'.order_status',Orders::STATUS_SHIPMENTS], ])->when(!$boolMaster,function ($query2) use ($oT,$o_eT,$assPhone){ return $query2->where($o_eT.'.delivery_phone',$assPhone); }); })->orWhere(function ($query)use($oT,$sellerId){ $query->where($oT.'.order_status',Orders::STATUS_PAY) ->where($oT.'.seller_id',$sellerId); })->pluck($oT.'.id')->toArray(); return $orderIds; }