i有一个标签表,例如用于许多目的的动物表。我想添加一种关系,这意味着每个animal
可以具有与之关联的多个tags
:
class Animals extends Model
{
protected $table = 'animals';
public function tags()
{
return $this->hasMany('AppTags');
}
}
但是,每个tag
只能包含1个animal_id
,而我需要包含多个animal_ids
。如何创建与animal_id
与tag_id
匹配的临时表?然后如何使用它?
animal_id tag_id
1 1
1 2
1 3
2 1
3 1
,当我进行AppAnimals::first->tags()
时,它会返回所有关联的标签?
为您需要三个表。
一只动物_table,tags_table和一张桌子,可以保持动画和标签之间的关系。
假设
表动物的ID为primary_key
标签表主键是id
和第三个表是anumal_id和tag_id作为外键。
现在,在动物模型的关系中应为
public function tags(){
return $this->hasmany(AppanimalTag::class,'animal_id','id')
}
在标签中,模型关系应为
public function animal(){
return $this->hasMany(AppanimalTag::class,'tag_id','id');
}
最终在动物标签模型的关系中应为
public function animal(){
return $this->hasOne(Appanimal::class,'id','animal_id');
}
public function tag(){
return $this->hasOne(Apptag::class,'id','tag_id');
}
现在您可以访问
AppAnimal::first->tags()
希望您了解我的概念。
使用与many-to-many
关系匹配的belongsToMany
链接到文档