Laravel orWhere 导致其他 where 查询被忽略
Laravel orWhere is causing other where queries to be ignored
我必须使用 3 个不同的表输出数据,并且它们必须满足特定条件。
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
而且,我需要允许用户使用姓名或 IC 搜索列表。
->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
我的问题是,当满足 orWhere 条件时,甚至忽略了必要的条件,它显示没有 late_return_status 的数据为 1.
这是完整的代码。
$late_books = Borrow::join('books', 'borrows.book_id', '=', 'books.id')
->join('borrowers', 'borrows.borrower_id', '=', 'borrowers.id')
->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
->get(['borrowers.borrower_name', 'borrowers.IC', 'borrowers.phone_no' ,'books.ISBN', 'books.book_title', 'books.year','books.author', 'books.publisher_name',
'borrows.issue_date', 'borrows.due_date']);
你想要的是将搜索条件括在括号中。
您可以使用逻辑分组 (https://laravel.com/docs/9.x/queries#logical-grouping) 实现此目的。
$late_books = Borrow::join('books', 'borrows.book_id', '=', 'books.id')
->join('borrowers', 'borrows.borrower_id', '=', 'borrowers.id')
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
->where(function ($query) use ($search) {
$query->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
})
->get(['borrowers.borrower_name', 'borrowers.IC', 'borrowers.phone_no' ,'books.ISBN', 'books.book_title', 'books.year','books.author', 'books.publisher_name',
'borrows.issue_date', 'borrows.due_date']);
我必须使用 3 个不同的表输出数据,并且它们必须满足特定条件。
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
而且,我需要允许用户使用姓名或 IC 搜索列表。
->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
我的问题是,当满足 orWhere 条件时,甚至忽略了必要的条件,它显示没有 late_return_status 的数据为 1.
这是完整的代码。
$late_books = Borrow::join('books', 'borrows.book_id', '=', 'books.id')
->join('borrowers', 'borrows.borrower_id', '=', 'borrowers.id')
->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
->get(['borrowers.borrower_name', 'borrowers.IC', 'borrowers.phone_no' ,'books.ISBN', 'books.book_title', 'books.year','books.author', 'books.publisher_name',
'borrows.issue_date', 'borrows.due_date']);
你想要的是将搜索条件括在括号中。
您可以使用逻辑分组 (https://laravel.com/docs/9.x/queries#logical-grouping) 实现此目的。
$late_books = Borrow::join('books', 'borrows.book_id', '=', 'books.id')
->join('borrowers', 'borrows.borrower_id', '=', 'borrowers.id')
->where('borrows.late_return_status', '=', 1)
->where('borrows.return_date', '=', null)
->where(function ($query) use ($search) {
$query->where('borrowers.borrower_name', 'like', '%'.$search.'%')
->orWhere('borrowers.IC', 'like', '%'.$search.'%')
})
->get(['borrowers.borrower_name', 'borrowers.IC', 'borrowers.phone_no' ,'books.ISBN', 'books.book_title', 'books.year','books.author', 'books.publisher_name',
'borrows.issue_date', 'borrows.due_date']);