Невозможно отобразить все книги и имя автора в виде списка. Получаю ошибку. Если я возвращаю переменные books и авторы в контроллер (метод индекса), я получаю данные в виде массива. Но не может получить к ним доступ в поле зрения. Также, как упомянуто в комментируемом коде (в Book Controller) ниже, код из laravel документации показывает ошибку.
Модель книги
class Book extends Model
{
protected $guarded = [];
public function authors(){
return $this->belongsToMany('App\Models\Author')->withTimestamps();
}
}
Модель автора
class Author extends Model
{
public $guarded = [];
public function books(){
return $this->belongsToMany('App\Models\Book')->withTimestamps();
}
}
Книжный контроллер
public function index()
{
$query = Book::with('authors')->get();
Pls Read the commented lines below -
//foreach ($query as $book) {
//return $book->authors->author_name; //Error: Property [author_name] does not exist on this collection instance.
//}
// (above code is given in laravel documentation but shows error : why?)
foreach($query as $b){
$books[] = $b->book_name;
$authors[] = $b->authors->first()->author_name;
}
return view('books.index', compact('books','authors'));
}
public function create()
{
return view('books.create');
}
public function store(validateAuthorBook $request)
{
$validated = $request->validated();
if($validated){
$book = new Book();
$book->book_name = $request->book_name;
$book->save();
$author = new Author();
$author->author_name = $request->author_name;
$author->save();
$book->authors()->attach($author);
}
return back()->with('status', 'Insert Successful!');
}
Просмотр (index.blade. php)
@foreach($books as $b)
<tr>
<th>{{$loop->iteration}}</th>
<td>{{$b->book_name}}</td>
//<td>how to get author name</td>
@endforeach
</tr>
ошибка
Facade\Ignition\Exceptions\ViewException
Trying to get property 'book_name' of non-object (View:
D:\ProgrammingSSD\laragon\www\ulclibrary\resources\views\books\index.blade.php)