@PavelSachenko

Как привязать параметр к другой таблице?

Сама ошибка:
5ee9f86a625a6682187055.png
Разбор ошибки:
Есть модель Book в которой прописаны связи:
public function categories(){
        return $this->belongsTo(Category::class, 'category_id');
    }
    public function publishers(){
        return $this->belongsTo(Publisher::class, 'publisher_id');
    }


В контроллере метод:
public function index()
    {
        $products = Book::paginate(10);
        return view('admin.product.product.index', compact('products'));
    }


Миграция books
public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->date('published')->nullable();
            $table->float('price');
            $table->string('description')->nullable();
            $table->boolean('available');
            $table->string('author');

            $table->integer('category_id')->nullable();
            $table->integer('publisher_id')->nullable();
            $table->integer('country_id')->nullable();

            $table->timestamps();
        });
    }


Миграция categories
public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }


И код с view:
@foreach($products as $product)
                <tr class="table-dark">
                    <td>{{$product->title}}</td>
                    <td>{{$product->author}}</td>
                    <td>{{$product->publishers->name}}</td>
                    <td>{{$product->categories->name}}</td>
                    <td>{{$product->count}} шт.</td>
                    <td>{{$product->price}} руб</td>
                    <td>
                        <form action="{{route('admin.product.destroy', $product)}}" method="POST"class="d-inline">
                            @csrf
                            @method('DELETE')
                            <button type="submit" class="btn btn-danger">delete</button>
                        </form>
                        <a href="{{route('admin.product.edit', $product)}}" class="btn btn-warning">edit</a>
                        <a href="{{route('admin.product.show', $product)}}" class="btn btn-info">overview</a>
                    </td>
                </tr>
            @endforeach
            </tbody>
        </table>
        {{$products->links()}}


Описание проблемы:

Первая страница грузится без проблем, но при переходе по пагинации на вторую или любую другую (кроме первой), возникает ошибка, но при этом если убрать данную строку {{$product->categories->name}}, ошибка пропадает. Но почему тогда работает с {{$product->publishers->name}}, если оно аналогично {{$product->categories->name}}
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@Xachik
Laravel & Vue Js Developer
а у всех категорий есть name?
можешь показать ошибку?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@PavelSachenko Автор вопроса
Спасибо, что подтолкнули на мысль, ошибка была в том что, у одной из книг была категория, которой нету в БД
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы