#laravel #laravel-5 #eloquent
#laravel #laravel-5 #красноречивый
Вопрос:
Я хотел бы иметь, table
который имеет one to many
с самим собой. Например: у меня есть что-то вроде a, people table
у которого может быть много других people
.Вот как выглядит мой код:
public function up()
{
Schema::create('people', function (Blueprint $table) {
$table->string('id')->primary();//Here my PK is a string
$table->string('name');
$table->string('title')->nullable();
$table->string('parent_id');//Here is the foreign key of another person
$table->timestamps();
});
}
И в моем Person.php модель, у меня есть это:
public function people()
{
return $this->belongsTo('AppPerson')->withDefault();
}
public function person()
{
return $this->hasMany('AppPerson');
}
Взгляните на это изображение:
Ответ №1:
В Person.php модель:
public function parent()
{
return $this->belongsTo('AppPerson', 'parent_id');
}
public function child()
{
return $this->hasMany('AppPerson', 'parent_id');
}
Комментарии:
1. да, это хорошо …. но название вашего отношения «один ко многим» — сделать дочернее , подобное
The Person has many Child
.2. @jochri3 проверьте мой отредактированный ответ, чтобы установить родительские и дочерние отношения с использованием модели ‘Person’.
3. Большое вам спасибо
Ответ №2:
Добавьте parent_id в свою миграцию и определите связь в своей модели
public function people()
{
return $this->belongsTo('AppPerson')->withDefault();
}
public function person()
{
return $this->hasMany(self::class, 'parent_id');
}
Комментарии:
1. Итак, мой
migration
файл в порядке?2. я думаю, что parent_id должен иметь значение null
3. Да, вы правы, parent_id должен иметь значение null. Я это сделал. Также благодарим