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 關注
- 192 瀏覽
添加回答
舉報