tp5.1 左連的時(shí)候如何指定多個(gè)條件

有時(shí)候,在A表左連B表的時(shí)候,需要先在B表中過(guò)濾一些數(shù)據(jù),我們想要生成的語(yǔ)句如下:

SELECT ,s.,sl.level_id as level_id,l.name as l_name FROM A s LEFT JOIN B sl ON sl.student_id=s.id AND sl.is_current=1

這個(gè)語(yǔ)句的效果就是在B表中過(guò)濾is_current不等于1的數(shù)據(jù),然后在進(jìn)行關(guān)聯(lián),這樣的好處是left join就能返回左表A的全部行數(shù)。若是語(yǔ)句如下面這樣:

SELECT ,s.,sl.level_id as level_id,l.name as l_name FROM A s LEFT JOIN B sl ON sl.student_id=s.id where sl.is_current=1

則這樣的效果就等同于inner join,返回的數(shù)據(jù)就是A表和B表連接查詢(xún)后生成的臨時(shí)表,然后再過(guò)濾is_current這個(gè)條件,導(dǎo)致不能達(dá)到left join的效果。

下面我們來(lái)展示下tp5.1中該如何達(dá)到該效果:

首先,假定已經(jīng)為A和B表生成了模型,那我們可以這樣用:

ADb::alias('A') ->leftJoin("$BTableName B", ['A.student_id=B.id', 'B.is_current=1']);



注:作用體現(xiàn)在A和B表,在如果不限定B表的is_current時(shí)是一對(duì)多的關(guān)系,
所以需要先過(guò)濾掉B表的is_current不滿(mǎn)足的數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容