Laravel子查詢

今天使用關聯查詢的時候需要使用三個條件進行查詢,我實際想要的sql語句如下:

select * from `treat_course_item_paper` left join `item_paper` on `treat_course_item_paper`.`item_paper_id` = `item_paper`.`item_paper_id` where `tcip_status` = "1" and (`user_id` = "1" or `session_id` = "06b7a7c97ad8b58a7cdffb5120690552fa580301")

最開始使用的查詢如下:

        $query = TreatCourseItemPaper::leftJoin('item_paper', 'treat_course_item_paper.item_paper_id', '=', 'item_paper.item_paper_id');

        $query = $query->where('tcip_status', $tcip_status);

        $query = $query->where('user_id', $identy_id);

        $query = $query->orWhere('session_id', $identy_id);

        $myItemPapers = $query->get();

對應的sql語句爲:

select * from `treat_course_item_paper` left join `item_paper` on `treat_course_item_paper`.`item_paper_id` = `item_paper`.`item_paper_id` where `tcip_status` = "1" and `user_id` = "1" or `session_id` = "06b7a7c97ad8b58a7cdffb5120690552fa580301"

明顯不是我想要的結果,如果是原生sql的話只要把最後兩個條件使用括號括起來就行了,但是使用laravel的語句就沒有這麼直接了,沒辦法查文檔(http://www.golaravel.com/laravel/docs/5.0/queries/#advanced-wheres)可以使用“羣組化參數”。如:

$query = $query->where(function($query)
        {

            $query->where('user_id', $identy_id)
                  ->orWhere('session_id', $identy_id);
        });

但是我裏面需要傳遞參數$identy_id,又不能在function()中直接寫多個參數。
後來想着使用閉包,但是閉包函數也不能解決問題。但是閉包裏的傳參給我了提示,閉包中可以使用use關鍵字,靈機一動試了試,果真可以。
如:

$query = $query->where(function($query) use ($identy_id)
        {

            $query->where('user_id', $identy_id)
                  ->orWhere('session_id', $identy_id);
        });

閉包的例子如下:

連接閉包和外界變量的關鍵字:USE

閉包可以保存所在代碼塊上下文的一些變量和值。PHP在默認情況下,匿名函數不能調用所在代碼塊的上下文變量,而需要通過使用use關鍵字

function getMoney() {
rmb=1; dollar = 6;
func=function()use( rmb ) {
echo rmb;echo dollar;
};
$func();
}

getMoney();

//輸出:
//1
//報錯,找不到dorllar變量

Author:leedaning
本文地址:http://blog.csdn.net/leedaning/article/details/53792591

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章