2 回答
TA贡献1829条经验 获得超6个赞
您应该遵循 Laravel(尤其是 Eloquent)关于命名约定的建议和最佳实践。这意味着你的gallery_images表应该有gallery_id字段而不是你在那里的内容。信不信由你,那样你会跳过很多非受迫性错误和问题。我将让您回答我将如何代替您:
// \App\Gallery::class
class Gallery extends Model
{
public function galleryImages()
{
return $this->hasMany(GalleryImage::class);
}
public function firstGalleryImage()
{
return $this->hasOne(GalleryImage::class);
}
}
// \App\GalleryImage::class
class GalleryImage extends Model
{
public function gallery()
{
return $this->belongsTo(Gallery::class);
}
}
基本上,您可以根据需要在模型中设置返回特定关系的方法。在Gallery::class这里,您可以看到我已经设置了一个关系,它将只返回该画廊的第一张图片。在控制器中你会调用它
public function someControllerMethod()
{
$gallery = Gallery::with(['firstGalleryImage'])->first();
// or
$galleries = Gallery::with(['firstGalleryImage'])->get();
}
现在返回的对象$gallery或集合$galleries将只携带第一张图像相关。在您的情况下(如果您不想更改字段名称),您需要遵循有关如何将另一个模型的键设置为方法参数的文档。
TA贡献1798条经验 获得超7个赞
你可以使用 Laravel 的 Eloquent ORM(Eager Loading),这里是一个单一图像(图像)和多个图像(媒体)关系的例子。
public function media()
{
return $this->hasMany(Media::class, 'foreign_key', 'local_key');
}
public function defaultMedia()
{
return $this->hasOne(Media::class, 'foreign_key', 'local_key');
public function image()
{
return $this->defaultMedia();
}
- 2 回答
- 0 关注
- 152 浏览
添加回答
举报