在我的数据库中,我必须保存人和与第一个人有关系的人的数据。例如:父亲,母亲,儿子,女儿等
然后是数据库的设计,我是在following way中完成的,这是一个多对多的关系,因为一个人有很多与之相关的人。
但是我不确定是否还可以。
class Person extends Model
{
protected $fillable = [
'name',
'surname',
'profile_picture'
.....
];
public function relationships()
{
return $this -> belongsToMany(Person::class);
}
}
创建关系时,我创建了一个名为person_person的第三个迁移表,以保存ID和描述(父亲,母亲,儿子,女儿)
可以这样描述关系吗?
public function relationships()
{
return $this -> belongsToMany(Person::class);
}
要成功完成这段关系,我应该添加些什么?
答案 0 :(得分:1)
您需要定义表,主键和外键,因为Laravel可能无法确定(尝试,但可能不会成功)。像这样:
public function relationships(){
return $this->belongsToMany(Person::class, "person_person", "id_person", "id_person_related")
->withPivot(["parentesco"]);
}
或类似。表名有点尴尬,请考虑其他因素,例如'relationships'
或传达更多含义的东西。
有关如何为belongsToMany()
定义附加参数的详细信息,请参见https://laravel.com/docs/5.8/eloquent-relationships#many-to-many
答案 1 :(得分:0)
Laravel 为两个不同表的 manyToMany
关系提供了一个很好的约定,但是当我们需要在同一个表中使用 manyToMany
关系时,这个约定不起作用。
解决步骤:
这个链接有完美的解决方案https://laracasts.com/series/laravel-6-from-scratch/episodes/58
public function relationships() { return $this->belongsToMany(Person::class,'relatives','persion_id','relative_persion_id'); }