Сохранение связных данных


"Классический" вариант сохранения двух объектов

$customer = Customer::findOne(123);
$order = new Order();
$order->subtotal = 100;
// ...

// установка атрибута, которой задаёт связь "customer" в объекте Order
$order->customer_id = $customer->id;
$order->save();

Вариант сохранения через метод link()

$customer = Customer::findOne(123);
$order = new Order();
$order->subtotal = 100;
// ...

$order->link('customer', $customer);

Метод link() хорош тем, что сохраняет даже те связи, которые сделаны через
промежуточную таблицу связей! (т.е. он сам добавляет связь!)

Существует противоположная операция для link() - это операция unlink().
Она снимает существующую связь с двух объектов Active Record

$customer = Customer::find()->with('orders')->where(['id' => 123])->one();
$customer->unlink('orders', $customer->orders[0]);