如何获取未借和有库存的图书列表?

问题描述 投票:0回答:1

谁能帮我解决查询可用书籍的问题吗?我不想让用户借阅已经借出或尚未归还的书籍以及根据份数缺货的书籍。

  • 我有
    Book
    模型和
    books
    number_of_copy
    列的表格。
  • 我有
    BorrowRequest
    模型和
    borrow_requests
    表格,其中包含借款人或用户的详细信息。
  • 我有
    BorrowRequestItem
    模型和
    borrow_request_items
    表,其中
    quantity
    列是用户借用的副本数量,以及
    returned_at
    列(如果归还或未归还则触发)。

现在我想查询用户正在借阅的书籍和库存书籍。

$user = 1; // sample user but it is dynamic

if (!$user) {
  return;
}

$availableBooks = \App\Models\Book::where('number_of_copy', '>', 0)
  ->where('is_requestable', true)
  ->whereNull('deleted_at')
  ->whereNotIn('id', function ($query) use ($user) {
    $query->select('book_id')
      ->from('borrow_request_items')
      ->join(
        'borrow_requests',
        'borrow_request_items.borrow_request_id',
        '=',
        'borrow_requests.id'
      )
      ->whereColumn('borrow_request_items.book_id', 'books.id')
      ->where('borrow_requests.borrower_user_id', $user)
      ->whereIn('borrow_requests.status', ['Pending', 'Approved'])
      ->whereNull('borrow_request_items.returned_at')
      ->groupBy('book_id')
      ->havingRaw('SUM(borrow_request_items.quantity) >= books.number_of_copy');
    })
  ->get()
  ->pluck('title', 'id')
  ->all();

return $availableBooks;
laravel eloquent query-builder laravel-11
1个回答
0
投票

您遇到的错误是什么?代码看起来是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.