我有一个标签表和一个用于多种用途的动物表(例如)。我想添加一个关系,这意味着每个animal
可以有多个tags
与之关联:
class Animals extends Model
{
protected $table = 'animals';
public function tags()
{
return $this->hasMany('\App\Tags');
}
}
但是每个tag
只能包含1个animal_id
,而我需要它包含多个animal_ids
。如何创建与animal_id
到tag_id
匹配的临时表?然后我该如何使用它?
animal_id tag_id
1 1
1 2
1 3
2 1
3 1
这样,当我App\Animals::first->tags()
时,它会返回所有相关标签吗?
答案 0 :(得分:3)
为此你需要三张桌子。
一个animals_table,tags_table和一个表格,用于保存animanls和标签之间的关系。
假设
表动物的id为primary_key
标签表主键是id
和第三个表是animal_tags,它有anumal_id和tag_id作为外键。
现在在动物模型中的关系应该是
public function tags(){
return $this->hasmany(\App\animalTag::class,'animal_id','id')
}
在标签中,模型关系应该是
public function animal(){
return $this->hasMany(\App\animalTag::class,'tag_id','id');
}
最后在animalTag模型中的关系应该是
public function animal(){
return $this->hasOne(\App\animal::class,'id','animal_id');
}
public function tag(){
return $this->hasOne(\App\tag::class,'id','tag_id');
}
现在您可以访问
App\Animal::first->tags()
希望你理解我的观念。
答案 1 :(得分:0)
使用符合belongsToMany
关系的many-to-many
link to documentation