靈活構建和拼接Laravel的SQL語句

在實際應用中,我們可能會遇到很多查詢條件互相制約的情況,例如,搜索某某學校,某某班裏姓李的同學。

我們例如學校的變量叫做 $school,班級叫做$class,學生姓名叫做$name,那麼,我們的拼接語句這樣寫


$str_school = ' ';
$str_class = ' ';
$str_name = ' ';

$str_school = ' and school = '.$school; //別忘了AND前面有小空格
$str_class = ' and class = '.$class;
$str_name = ' and name = "%'.$name.'%"'; //這裏要注意,模糊查詢的時候,%要加引號的

然後我們拼接一下

$students = Members::whereRaw('1=1'.$str_school.$str_class.$str_name)->paginate(30); //拼接小技巧,在and前加 1=1,即使你拼接的字符串都是空,也不要緊。

然後老師又提出新要求了,我們要按照同學們的期末成績總和排序,這時候就用到selectRaw

$students = Members::selectRaw('members.*','(yuwen+shuxue+yingyu) as sumscore')
             ->whereRaw('1=1'.$str_school.$str_class.$str_name)
             ->orderby('sumscore','desc')->paginate(30);

然後老師又說,那你按照語數外分別給我排一下吧,這時不能每種情況都寫一個查詢語句吧,這時要用到orderByRaw()


$ord = '';
if($ord == 1){
    $ord = 'englishScore desc' //按英語降序
}...

$students = Members::selectRaw('members.*','scores.*','(yuwen+shuxue+yingyu) as sumscore')
             ->whereRaw('1=1'.$str_school.$str_class.$str_name)
             ->orderByRaw($ord)
             ->paginate(30);

寫本文的目的就是讓大家多使用拼接語句,你會發現你的水平有很大提升哦!
發佈了55 篇原創文章 · 獲贊 37 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章