Laravel将动物与多个标签联系起来

时间:2017-06-29 11:19:30

标签: mysql laravel

我有一个标签表和一个用于多种用途的动物表(例如)。我想添加一个关系,这意味着每个animal可以有多个tags与之关联:

class Animals extends Model
{
    protected $table = 'animals';
    public function tags()
    {
        return $this->hasMany('\App\Tags');
    }
}

但是每个tag只能包含1个animal_id,而我需要它包含多个animal_ids。如何创建与animal_idtag_id匹配的临时表?然后我该如何使用它?

animal_id    tag_id
1            1
1            2
1            3
2            1
3            1

这样,当我App\Animals::first->tags()时,它会返回所有相关标签吗?

2 个答案:

答案 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