Красноречивое отношение вставка / создание с идентификатором родителя - PullRequest
0 голосов
/ 02 апреля 2019

Существует три модели.

class GrandParent extends Model
{
}
class Parent extends Model
{
    public function children()
    {
        return $this->hasMany(Child::class);
    }
    public function grand_parent()
    {
        return $this->belongsTo(GrandParent::class);
    }
}
class Child extends Model
{
    protected $fillable = ['parent_id','grand_parent_id','data'];
}

При вставке записи в Child также вставляются parent_id и grand_parent_id, но grand_parent_id задается вручную

$data = $this->someDataGenerator();
$child = Child::first();
$child()->create([
    'grand_parent_id' => $parent->grand_parent->id, //manually insert
    'data' => $data
]);

Есть ли способ сделать это по модели?Поэтому всякий раз, когда $child()->create($data), grand_parent_id будет автоматически вставляться?

1 Ответ

0 голосов
/ 02 апреля 2019

вам не нужно добавлять grand_parent_id в таблицу Child. при необходимости получает деда или дедушку:

$child = Child::find(1);
$grand_parent = $child->parent->grand_parent;

и получите всех детей из модели GrandParent с помощью отношения Has Many Through:

class GrandParent extends Model
{
    /**
     * Get all of the grandchildren for the GrandParent.
     */
    public function grandchildren()
    {
        return $this->hasManyThrough('App\Child', 'App\Parent');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...