79 views

在使用laravel開發過程中,開發者經常會遇到如下的SQL,在laravel中如何正確表達類似這樣的SQL:

SELECT * FROM `medias` WHERE (`prov_id` = 410000 OR `city_id` = 410102) AND (`scence_id` = 101 OR `parent_id` = 10);

很多laravel開發者可能會選擇whereRaw()這樣的方法把原生SQL包裹起來簡單省事:

Media::whereRaw('(`prov_id` = 410000 OR `city_id` = 410102) AND (`scence_id` = 101 OR `parent_id` = 10)');

whereRaw()方式使用不當會有SQL注入的風險,這裡,laravel提供一種優雅方式來表達這樣的SQL場景,那就是使用閉包函數把括弧內的表達式包裹起來,比如,類似上面的SQL可以表達為:

Media::where(function($query){    return $query->where('prov_id',410000)->orWhere('city_id',410102);})->where(function($query){    return $query->where('scence_id',101)->orWhere('parent_id',10);});

這樣的代碼,閱讀起來更容易理解,並且也避免了SQL注入的風險。

Share
Go Top