Проверка записи сводной таблицы Laravel, а также проверка в основной таблице - PullRequest
0 голосов
/ 28 марта 2019

Я создаю проект управления библиотекой в ​​своей сельской библиотеке.

У меня есть три таблицы.

books
---------
id
title
copies

borrowers
---------
id
name

borrows
---------
id
cleared
book_id
borrower_id

Я присоединился к таблице заемщиков и таблице книг, которая имеет одно отношение к таблице заимствований.

Моя проблема в том, если доступны 2 копии книги.1 заимствована некоторым пользователем, еще одна копия доступна в библиотеке.Я пытаюсь получить, если одна копия доступна в библиотеке, а затем показать для однократного просмотра.

это мой код.

    $books = Book::doesnthave('borrows', 'or', function($query) {
        $query->where('cleared', '=', '0');
       })->get();
    return AllBookResource::collection($books);

Я хочу получить одолженные очищенные книги или книгу, не очищенную, еслидоступна одна копия.

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Вы можете проверить количество заимствованных книг, которые не были очищены, и вернуть только те книги, значение копий которых превышает его.

$books = Book::withCount('borrows', 'or', function($query) {
    $query->where('cleared', '=', '0');
   })
     ->whereColumn('borrows_count', '<', 'books.copies')
     ->get();
return AllBookResource::collection($books);

Обратите внимание, что функция whereColumn доступна только в laravel5 и выше.

0 голосов
/ 28 марта 2019

Я бы изменил ваш подход к работе с копиями.

Решение

Создайте еще одну таблицу для имеющихся у вас копий, таким образом вам будет легче вносить изменения, например, добавить издание книги, год, когда она была напечатана, и будет легче увидеть, если она имеет копия доступна для заимствования.

...