調整prettus/l5-repository中setscope
Select * from XXXX where (aa='xxxx' or bb='ccc' ) and gg='gg'
就為了那個括號。。。原來Package好像做不到,因此調整了一下,為免自己遺忘,筆記一下。。。。
最近在自學PHP及其框架Laravel,對一個向來只會用windows的我真的很。。。。不習慣。。。。很多連裝都不會,但。。。好歹也讓我架了一個環境在Windows上試寫
針對repository,在網路亂逛找了prettus/l5-repository這套件,看看就裝上去了,摸了一下,也大概都能用,有點小問題就調整掉,但在做查詢時,下SQL我是下的很精了。。但用Eloquent ORM這我還真的一個頭二個大
很認真的看了一下,就把套件中的setscope調整成自己合用的,其實我主要解決的問題,SQL很簡單,但用Eloquent ORM要改下才行
只是想達到類似下面的SQL要求
Select * from XXXX where (aa='xxxx' or bb='ccc' ) and gg='gg'
就為了那個括號。。。原來Package好像做不到,因此調整了一下,為免自己遺忘,筆記一下。。。。
把要用成括號內的條件另外傳囉
if ($request->has('AccountNo')){
$qryarray = array_add($qryarray, "AccountNo",['like','%'.$request->input("AccountNo").'%']);
}
if ($request->has('ChineseName')){
$subqryarray = array_add($subqryarray, "ChineseName",['like','%'.$request->input("ChineseName").'%']);
}
if ($request->has('EngName')){
$subqryarray = array_add($subqryarray, "EngName",['like','%'.$request->input("EngName").'%']);
}
if(count($subqryarray)>0) {
$qryarray= array_add($qryarray, 'subQuery1',['or',$subqryarray] );
$subqryarray=[];
}
if ($request->has('DisplayName')){
$qryarray = array_add($qryarray, "DisplayName",['like','%'.$request->input("DisplayName").'%']);
}
if ($request->has('CompanyMail')){
$qryarray = array_add($qryarray, "CompanyMail", ['like','%'.$request->input("CompanyMail").'%']);
}
$this->repository->setscope($qryarray);
public function setscope(array $query) {
/*修改人員:JoJo
* 修改原因:原始的沒有可以用群組or的條件式
* 修改日期:2016-04-28
*
*/
//parent::setscope($query);
$this->scopeQuery(function ($model) use ($query) {
$this->model= $this->model->where('CompanyID','=', WDASGetCompanyID());
foreach ($query as $fileld=>$value) {
if (is_array($value)) {
list($conditioin,$val)=$value; //$val是array,表示包了一個群組查詢,$condition可以傳'or'進來,原則上目前不用
if (is_array($val)) {
//$val中是一個完整的子條件,群組查詢強迫他要傳判斷條件進來,因為懶得再判斷有沒有傳=
$this->model=$this->model->where(function($subquery) use ($val){
foreach ($val as $subField=>$subValue) {
list($subcon,$subval)=$subValue;
$subquery=$subquery->orwhere($subField,$subcon,$subval);
}
return $subquery;
});
}
else {
$this->model=$this->model->where($fileld,$conditioin,$val); //有傳判斷條件進來(=,like,<>)
}
}
else {
$this->model=$this->model->where($fileld,'=',$value); //沒給判斷式直接=
}
}
return $this->model;
}
);
}
打雜打久了,就變成打雜妹
程式寫久了,就變成老乞丐