Суть проблемы: по умолчанию возвращается одна и та же запись в БД, но _разные_ объекты модели! Пример: class Customer extends ActiveRecord { public function getOrders() { return $this->hasMany(Order::className(), ['customer_id' => 'id']); } } class Order extends ActiveRecord { public function getCustomer() { return $this->hasOne(Customer::className(), ['id' => 'customer_id']); } } // SELECT * FROM `customer` WHERE `id` = 123 $customer = Customer::findOne(123); // SELECT * FROM `order` WHERE `customer_id` = 123 $order = $customer->orders[0]; // SELECT * FROM `customer` WHERE `id` = 123 $customer2 = $order->customer; // выведет "not the same" echo $customer2 === $customer ? 'same' : 'not the same'; Чтобы измежать этого - нужно определить "обратную" связь class Customer extends ActiveRecord { public function getOrders() { return $this->hasMany(Order::className(), ['customer_id' => 'id'])->inverseOf('customer'); } } // SELECT * FROM `customer` WHERE `id` = 123 $customer = Customer::findOne(123); // SELECT * FROM `order` WHERE `customer_id` = 123 $order = $customer->orders[0]; // SQL-запрос не выполняется $customer2 = $order->customer; // выведет "same" echo $customer2 === $customer ? 'same' : 'not the same';
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor