Yii2左联接查询条件不为空

时间:2020-04-16 14:26:00

标签: php yii2

我有一个图书和借书表,我想查询所有借书不为null的借书。

表结构为

hash = {foo: 'bar', bar: 'foo', foobar: 'barfoo', barfoo: 'foobar'}
hash.keys.map { |key| r = {}; r[key] = hash[key]  }
# => [{:foo=>"bar"}, {:bar=>"foo"}, {:foobar=>"barfoo"}, {:barfoo=>"foobar"}]

然后借书

tbl_books
   id
   name

所以在我的查询中我有

tbl_borrowed_books
    id
    book_id
    borrowed_at

现在我想添加一个条件,使我想获得所有记录为$query = TblBooks::find()->leftJoin('tbl_borrowed_books','tbl_borrowed_books.book_id = tbl_books.id')->all(); 的书

我如何检查不为空

类似

tbl_borrowed_books

2 个答案:

答案 0 :(得分:2)

如果您坚持使用LEFT JOIN,则可以检查第二个表中任何没有NULL作为有效值的列。例如,您可以使用它的主键或外键列。

 $query = TblBooks::find()
    ->leftJoin(
        'tbl_borrowed_books',
        'tbl_borrowed_books.book_id = tbl_books.id'
    )->where(['not', 'tbl_borrowed_books.book_id', NULL])
    ->all();

但是最好使用INNER JOIN,因为它只返回两个表中都存在匹配记录的记录。因此它的作用与WHERE tbl_borrowed_books.book_id IS NOT NULL完全相同。

$query = TblBooks::find()
    ->innerJoin(
        'tbl_borrowed_books',
        'tbl_borrowed_books.book_id = tbl_books.id'
    )->all();

答案 1 :(得分:-1)

更多基于ActiveRecord的解决方案来获取相交的借书:

$borrowedBooks = TblBooks::find()->joinWith('borrowedBooks', true, 'inner join')->all();
相关问题