在涉及多对多关系的laravel项目中,我应该把“属性值”放在哪个数据库表中?

时间:2017-11-22 11:58:40

标签: php laravel many-to-many relationship relation

我有一个包含多对多关系和多语言的laravel项目。 我使用Laravel-Translatable包用于多语言。
该程序存储大量具有其属性的文件 每个属性在多个文件之间共享。但是每个属性在每个文件中都有不同的值。
表和他们的关系就像这张照片:tables diagram

我应该把attribute_value放在哪个表中? 谢谢

1 个答案:

答案 0 :(得分:0)

attribute_value添加到attrib_file表格。因为每个与文件attribute_value的连接应该是不同的。另一方面,每个文件存储属性值的数量。这就是attrib_file数据透视表最适合的原因。 如何从数据透视表中检索信息在documentation

中给出
$attr = App\Attribute::find(1);
foreach($attr->files as $file) {
  echo $file->pivot->attribute_value;
}

确保在关系方法中添加->withPivot('attribute_value')返回结束$this->belongsToMany('App\Models\File')。在属性模型中应该是这样的:

..
public function files() {
    return $this->belongsToMany('App\Models\File')->withPivot('attribute_value');
}