首页 > 解决方案 > Laravel 与 eloquent 模型的多重关系

问题描述

我有 3 个表,产品、图像和颜色表。

图像表属于产品表,也属于颜色表。在产品控制器内部,我需要获取与产品相关的数据,例如:产品图像和颜色表中的图像颜色。

产品型号:

namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Image;
use App\Color;
class Product extends Model {
public function images() {
    return $this->hasMany(Image::class);
}

}

产品控制器:

$products = Product::with('images', 'images.colors')->get();

图片型号:

use App\Product;
use App\Color;
class Image extends Model {
public function products() {
    return $this->belongsTo(Product::class);
}
public function colors() {
    return $this->belongsTo(Color::class);
}

颜色型号:

public function colorTags() {
    return $this->hasMany('App\Image', 'color_id', 'id');
}

标签: laravelrelationship

解决方案


我刚刚遇到了同样的问题。

看起来问题可能是您使用“颜色”作为关系的方法名称。

尝试改变:

public function colors() {
    return $this->belongsTo(Color::class);
}

public function colours() {
    return $this->belongsTo(Color::class);
}

我认为它会起作用。

使用“资产”和“模板”作为关系名称时,我也遇到过这个问题。似乎有些关键字会与 eloquent 正在做的其他事情发生冲突。如果我们能在某处获得这些表格的列表,那就太好了。


推荐阅读