拉拉维尔。 .JOIN应该过滤结果吗?

发布于 2025-01-22 11:17:57 字数 1331 浏览 0 评论 0原文

距离我所知道的远处,.join只是加入而不会过滤任何东西。但是我遇到了一个问题,似乎正在被过滤。

for ($i=0; $i < count($borrowers); $i++) { 
            $borrowed_books[$i] = Borrower::join('borrows', 'borrows.borrower_id', '=', 'borrowers.id')
                        ->join('late_returns', 'late_returns.borrow_id', '=', 'borrows.id')
                        ->join('books', 'borrows.book_id', '=', 'books.id')
                        ->where('borrowers.id', '=', $borrowers[$i]->id)
                        ->get(['borrowers.id','books.book_title','books.year','books.author', 'books.publisher_name', 'books.ISBN', 'borrows.issue_date', 'borrows.return_date', 'late_returns.late_return_fines', 'late_returns.overdue_days']);
        }
        return view('admin.borrowers', compact('borrowers', 'search', 'borrowed_books'));

查询部分- &gt; join('late_returns')仅导致late_return表中存在的书籍出现。就是

在borrower_id 1的所有内容中都应出现。

当从查询中删除与late_returns表相关的所有内容时,显示了预期的行。知道为什么会发生这种情况吗?

So far from what i know, .join is just to join and does not filter anything. But i have run into an issue where it seems like it is being filtered.

for ($i=0; $i < count($borrowers); $i++) { 
            $borrowed_books[$i] = Borrower::join('borrows', 'borrows.borrower_id', '=', 'borrowers.id')
                        ->join('late_returns', 'late_returns.borrow_id', '=', 'borrows.id')
                        ->join('books', 'borrows.book_id', '=', 'books.id')
                        ->where('borrowers.id', '=', $borrowers[$i]->id)
                        ->get(['borrowers.id','books.book_title','books.year','books.author', 'books.publisher_name', 'books.ISBN', 'borrows.issue_date', 'borrows.return_date', 'late_returns.late_return_fines', 'late_returns.overdue_days']);
        }
        return view('admin.borrowers', compact('borrowers', 'search', 'borrowed_books'));

The query section ->join('late_returns') causes only books present in late_return table to show up. Which is
enter image description here

Where as everything with borrower_id 1 should show up.
enter image description here

The intended rows are shown when everything related to late_returns table is removed from the query. Any idea why this is happening?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

悟红尘 2025-01-29 11:17:57
// Instead try the below method, it should return everything you want

$borrowers_ids = $borrowers->pluck('id'); // assuming $borrowers is a collection

$borrows = Borrow::query()
                ->whereHas('borrower', function ($query) use ($borrowers_ids) {
                    $query->whereIn('id', $borrowers_ids);
                })
                ->with('lateReturn', 'book')
                ->get();
// Instead try the below method, it should return everything you want

$borrowers_ids = $borrowers->pluck('id'); // assuming $borrowers is a collection

$borrows = Borrow::query()
                ->whereHas('borrower', function ($query) use ($borrowers_ids) {
                    $query->whereIn('id', $borrowers_ids);
                })
                ->with('lateReturn', 'book')
                ->get();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文