我有一个图书和借书表,我想查询所有借书不为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
答案 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();