Обновление отношений один на один с моделью - PullRequest
0 голосов
/ 26 октября 2018

У меня есть модель от 1 до 1 (модель1 <-1 --- 1-> модель1.0), и у меня есть модель 2.0, как показано ниже:

+------+         +---------+
|      |    +--1-+model1.0 |
|model1+-1--+    +---------+
|      |                    +----------+
+------+                    |model2.0  |
                            +----------+

Родительская модель:

model1 class: { $this->HasOne(ChildModel::class); }

Детская модель:

model1.0 class: {$this->belongsTo(Model1::class); }

Вопросы: как мне перейти с модели 1.0 на модель 2.0? как показано ниже:

+------+         +---------+
|      |         |model1.0 |
|model1+-1--+    +---------+
|      |    |               +----------+
+------+-   +-------------1-|model2.0  |
                            +----------+

Примечание:

  • модель1 и модель1.0 находятся в базе данных, но модель2.0 все еще находится в контроллере как переменная объекта.

  • model1.0 и model2.0 являются объектами одного и того же модельного класса

1 Ответ

0 голосов
/ 26 октября 2018

Отметьте эту часть документации:

Принадлежит отношениям

При обновлении отношения belongsTo вы можете использовать метод associate,Этот метод устанавливает внешний ключ для дочерней модели:

$account = App\Account::find(10);

$user->account()->associate($account);

$user->save();

При удалении отношения belongsTo вы можете использовать метод dissociate.Этот метод установит внешний ключ отношения в null:

$user->account()->dissociate();

$user->save();

Итак, вы можете просто сделать это:

/** Delete the relationship */
// get your model1.0 object
$model1_0 = ChildModel::find($id_1);
// delete the relationship between Model1.0 and Model1
$model1_0->relation()->dissociate();
$model1_0->save();

/** Create the new relationship */
// get your model2.0 object
$model2_0 = ChildModel::find($id_2);
// get your model1 object
$model1 = Model1::find($id);
// relate the models
$model2_0->relation()->associate($model1);
$model2_0->save();

Pd: Я предполагаю, что relation() - это имя отношения, определенного в дочерней модели.

ChildModel.php

public function relation()
{
    return $this->belongsTo(Model1::class);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...