Я хочу передать значение из одной таблицы в другую в Laravel - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь решить проблему, но у меня не так много глубины, чтобы ее решить

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

  • Стол книг

    Schema::create('books', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('about');
        $table->text('content');
        $table->string('image');        
        $table->integer('author_id');     
        $table->timestamps();    
    });
    
  • Таблица авторов

    Schema::create('authors', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('about');
        $table->string('image');             
        $table->timestamps();           
    });
    

Я подключаю оба, используя one-many relationship

Моя Book.php Модель имеет это

public function authors()
    {
        return $this->belongsTo(Author::class);
    }

Моя Book.php Модель имеет это

public function books()
{
    return $this->hasMany(Book::class);
}

Я могу сохранить идентификатор автора в таблице книг

МОЯ ПРОБЛЕМА Я хочу показать имя автора и название книги на внешнем интерфейсе, поэтому я попробовал это, но не работает

@foreach($books as $book)
<div class="col-md-3">
<div class="home-catalog-image">
<img src="{{ asset('/storage/'.$book->image) }}"> 
</div>
<p class="author">{{ $book -> author_id }}</p>
<h1 class="book-title">{{ $book -> name }}</h1>
</div>
@endforeach

Я не могу показать имя автора с $book -> author_id, я знаю этот подходэто неправильно, но я не знаю, что делать. Пожалуйста, мне нужна помощь. Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Используйте отношение, чтобы показать имя автора, но более важную предварительную загрузку (ленивая загрузка) всем авторам перед отправкой $books в представление, используя with() метод

Контроллер

$books = Books::query()->with('authors')->get(); //or paginate 

Просмотр

@foreach($books as $book)
<div class="col-md-3">
<div class="home-catalog-image">
<img src="{{ asset('/storage/'.$book->image) }}"> 
</div>
<p class="author">{{ $book->authors->name }}</p>
<h1 class="book-title">{{ $book -> name }}</h1>
</div>
@endforeach

Как я уже говорил, вы должны переименовать отношение с authors() на author(), поскольку у каждой книги есть только один автор

0 голосов
/ 07 октября 2019

BelongsTo означает, что author должно быть единичным

public function author()
{
        return $this->belongsTo(Author::class);
}

И в этом представлении

{{ $book->author->name }}

Вы можете просмотреть документацию для справки.

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