Во-первых, мои извинения, если проблема была решена.Я прочитал много подобных постов, но не совсем подходящий для моего случая.Я настраиваю простой проект в Laravel 5.8.Я хочу создать простой книжный магазин, и мне нужна книга с несколькими авторами, чтобы за каждым названием следовал автор или авторы (если их много), разделенные запятыми, а последний - словом «и».
Я установил две модели: «Автор» и «Книга» и их соответствующие таблицы, а также сводную таблицу, поскольку они находятся в отношении, принадлежащем ToMany.Все работает как шарм, я получаю свои результаты, как и ожидалось.Однако я не могу отформатировать результаты так, как мне нужно.В случае нескольких авторов, я всегда получаю дополнительную запятую в конце.Поскольку я не могу получить правильные запятые, я еще не пытался добавить последние 'и' в случае последнего автора.В случае одного автора решение простое, я просто использую условное.Однако, в случае нескольких авторов, все усложняется.Самым популярным способом решения подобных проблем было использование implode () различными похожими способами.Проблема этого метода заключается в том, что Eloquent использует свою внутреннюю логику для выполнения запроса, когда я перебираю «книги», там нет столбца автора, просто ссылка на сводную таблицу.Кроме того, авторы включают имя и фамилию в разные столбцы.Поэтому, когда я пытаюсь вручную создать массив 'implodable ()', извлекая соответствующие данные в противном случае, я получаю двойной размер элемента, поскольку каждое имя состоит из имени и имени теиста.И вдобавок ко всему, все это происходит в двойном цикле, что делает все еще более сложным для меня.Я уверен, что есть простой способ обойти это.
Это образец моего блейд-кода на данный момент.Конечно, условия должны быть соответствующим образом переставлены, когда проблема будет решена, для реализации регистра 'и':
<ul>
@foreach ($books as $book)
<li>{{ $book->title }} by
@if (count($book->author) == 1)
@foreach ($book->author as $name)
{{ $name->last_name }}
{{ $name->first_name }}
@endforeach
@else
@foreach ($book->author as $name)
{{ $name->last_name }}
{{ $name->first_name }}
{{- напечатать здесь запятую, если есть другие имена, или«и», если это последний.Проблема кажется, что ее нужно решать не условно, а как?-}}
@endforeach
@endif
</li>
@endforeach
</ul>
Структура моей БД:
- «авторы»: «id», «last_name», «first_name», «creation_at», «updated_at»
- 'books': 'id', 'title', 'creation_at', 'updated_at'
- 'author_book': 'id', 'author_id', 'book_id', 'creation_at','updated_at'
Ожидаемый результат:
- Название 1, Автор 1
- Название 2, Автор 1 и 2
- Название 3, Автор 1, 2 и 3
Фактический результат:
- Название 1, Автор 1
- Название 2, Автор 1 и2 и
- Название 3, Автор 1 и 2 и 3 и