首页 > 解决方案 > Yii2 不为空条件的左连接查询

问题描述

我有一个书籍和书籍借阅表,我想查询所有借阅书籍不为空的借阅书籍。

表结构为

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

我如何检查不为空

所以像

   $query = TblBooks::find()->leftJoin('tbl_borrowed_books','tbl_borrowed_books.book_id = tbl_books.id')
  ->where('<>','') //stuck here on adding the not null condition
  ->all();

标签: phpyii2

解决方案


如果您坚持使用,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();

推荐阅读