【发布时间】:2021-07-21 05:28:38
【问题描述】:
我正在学习 Laravel,我有两个表格书籍和类别 我创建了一个带有 book_id 和 category_id 列的数据透视表来建立表之间的关系,但是当我尝试在 show book 页面中显示类别并且我在 $books->categories 上进行 foreach 时,我遇到了一个错误,说foreach 参数为空
Book 模型文件:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
protected $fillable = ['title', 'desc', 'img'];
public function categories()
{
return $this->belongsTo('App\Models\Category');
}
}
类别模型文件
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
use HasFactory;
protected $fillable = ['name'];
public function books()
{
return $this->belongsTo(Book::class)->withPivot('book_category');
}
}
show.blade 页面:
@extends('layout')
@section('title')
Book #{{ $book->id }}
@endsection
@section('content')
<h2>{{ $book->title }}</h2>
<p>{{ $book->desc }}</p>
@foreach ($book->categories as $category)
<span class="text-muted mx-3">{{ $category->name }}</span>
@endforeach
<div class="row">
<div class="col-md-3 p-5">
<img src="{{ asset('uploads/books') }}/{{$book->img}}" class="w-100">
</div>
</div>
<a href="{{ route('books.index') }}" class="btn btn-primary">Back</a>
<a href="{{ route('books.edit', $book->id) }}" class="btn btn-warning mx-2">Edit</a>
<a href="{{ route('books.delete', $book->id) }}" class="btn btn-danger">Delete</a>
@endsection
数据透视表:
BookController 代码:
public function show($id)
{
$book = Book::findOrFail($id);
return view('books/show', compact('book'));
}
【问题讨论】: