tp5.1 左连的时候如何指定多个条件

有时候,在A表左连B表的时候,需要先在B表中过滤一些数据,我们想要生成的语句如下:

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

这个语句的效果就是在B表中过滤is_current不等于1的数据,然后在进行关联,这样的好处是left join就能返回左表A的全部行数。若是语句如下面这样:

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,返回的数据就是A表和B表连接查询后生成的临时表,然后再过滤is_current这个条件,导致不能达到left join的效果。

下面我们来展示下tp5.1中该如何达到该效果:

首先,假定已经为A和B表生成了模型,那我们可以这样用:

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



注:作用体现在A和B表,在如果不限定B表的is_current时是一对多的关系,
所以需要先过滤掉B表的is_current不满足的数据。

你可能感兴趣的:(tp5.1 左连的时候如何指定多个条件)