我的 laravel 项目中的书籍和类别存在一对多的问题。
我插入三个数据,其中两个具有相同的类别列值以及所述类别的相应 id。
在我插入第三个数据之前,它很好,但是在我插入第三个数据之后,它显示尝试读取空值上的属性“名称”,我尝试
$book->category?->name
导致之前的两个数据出现了类别名称,但没有出现第三个,是我的关系代码有问题还是什么?
类别.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use App\Models\Book;
class Categories extends Model
{
use HasFactory;
public function book(): HasMany
{
return $this->hasMany(Book::class, 'category');
}
protected $fillable = [
'name',
];
}
Book.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use App\Models\User;
use App\Models\Rent;
use App\Models\Categories;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Book extends Model
{
use HasFactory;
public function categories(): belongsTo
{
return $this->belongsTo(Categories::class, 'id');
}
protected $fillable = [
'book_code',
'book_title',
'author',
'category',
'publisher',
'stock',
'book_cover',
'book_desc',
'barcode',
];
}
book/index.blade.php
@foreach ($book as $book)
<tr>
<td><img src="/{{ $book->book_cover }}" width="100px"></td>
<td>{{ $book->book_title }}</td>
<td>{{ $book->categories?->name }}</td>
<td>{{ $book->stock }}</td>
<td>
<form action="{{ route('book.destroy',$book->id) }}" method="Post">
<a class="btn btn-success" href="{{ route('book.show',$book->id) }}">Detail</a>
<a class="btn btn-warning" href="{{ route('book.edit',$book->id) }}">Edit</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">Hapus</button>
</form>
</td>
</tr>
@endforeach
我的代码是否有问题,导致类别名称记录显示在图书插入的第一条和第二条记录上,但没有显示在图书的第三条记录上?
从尝试开始
public function category(): belongsTo
{
return $this->belongsTo(Categories::class, 'id');
}
接下来我建议使用category_id而不是id作为外键
这是假设这本书只有 1 个类别