【问题标题】:Laravel orWhere is causing other where queries to be ignored [duplicate]Laravel orWhere 导致其他 where 查询被忽略[重复]
【发布时间】:2023-02-21 13:33:09
【问题描述】:

我必须使用三个不同的表来输出数据,并且它们必须满足某些条件。

->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'
    ]);

【问题讨论】:

    标签: php laravel eloquent laravel-8


    【解决方案1】:

    您想要的是将搜索条件括在括号中。

    您可以使用逻辑分组 (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']);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-11
    • 2013-09-04
    • 2023-03-10
    • 2020-01-01
    • 2023-03-04
    • 1970-01-01
    • 2018-06-26
    • 2015-02-26
    相关资源
    最近更新 更多