Переопределить свойство объекта ActiveRecord

150
26 ноября 2018, 21:50

Допустим, у меня есть 2 модели AR. 1. Payment - платежи 2. Cart - корзина

И соответственно у payment

 public function getCarts()
{
    return $this->hasMany(Cart::className(), ['payment_id' => 'id']);
}

Задача следующая. Мне необходимо корзину второго платежа слить с корзиной первого.

т.е.

$first_payment = Payment::findOne($first_payment_id);
$second_payment = Payment::findOne($second_payment_id);

И объединяем:

$first_payment->carts = array_merge($first_payment ->carts, $second_payment->carts);

И разумеется при таком подходе я ловлю ошибку:

Setting read-only property: frontend\models\Payment::carts

Что в принципе и логично.

Скажите, как лучше перезаписать это свойство?

Answer 1
foreach ($second_payment->carts as $cart) {
    $cart->payment_id = $first_payment_id;
    $cart->save();
}
Answer 2

если я правильно понял задачу

use yii\helpers\ArrayHelper; 
$first_payment = Payment::findOne($first_payment_id);
$first_array =  ArrayHelper::toArray($first_payment,[
    'frontend\models\Payment' => [
         'carts'=>'Carts',     
    ],
]);
$second_payment = Payment::findOne($second_payment_id);
$second_array = ArrayHelper::toArray( $second_payment,[
    'frontend\models\Payment' => [
         'carts'=>'Carts',     
    ],
]);
$merge_payment = ArrayHelper::merge( $first_array, $second_array);

в результирующем массиве в ячейке merge_payment['carts'] будет массив с ключами из свойств Carts ,в результате слияния каждый ключ будет содержать массив двух значений.

READ ALSO
Запрос к БД YII2

Запрос к БД YII2

Подскажите пожалуйста, в приведенном коде, запрос к БД выполняется один раз а потом просто фильтруются данные или 2 запроса?

165
Передать значения отмеченных checkbox в url в виде get параметра

Передать значения отмеченных checkbox в url в виде get параметра

Как передать значения отмеченных checkbox в url в виде get параметра? В итоге хочу получить примерно такой url: wwwtest

161
Как загрузить офлайн-конверсии в Яндекс.метрику через php?

Как загрузить офлайн-конверсии в Яндекс.метрику через php?

В документации написано, создаем приложение, берем файл и шлем его POST`ом в яндекс и все окПробуем отправить, получаем ошибку 401, "Неавторизованный...

271
Как правильно отфильтровать данные?

Как правильно отфильтровать данные?

Подскажите пожалуйста, какой подход будет более правильныйМне необходимо данные из таблицы в БД разпихать по разным блокам на странице согласно...

169