$model->touch('last_purchase') обновляет все timestamp
Добавлено: 2019.10.22, 14:31
В модели настроил поведение :
при добавлении новой записи работает нормально, а вот когда мне надо вручную обновить дату последней покупки (это делается именно вручную при некоторых условиях, ивент before_update не подходит), "трогаю" его из контроллера:
но в итоге обновляется и дата регистрации клиента, т.е. registered_at.
Покопался в исходном коде метода touch - там вроде всё логично, в него передаёт атрибут, для него задаётся время ивента или текущее. не понимаю, как в этот метод попадает и второй атрибут. Если атрибуты берутся из настроек модуля поведения, то какой смысл в touch(конкретный атрибут), если всё равно обновляются все колонки? да и в документации к touch() написано: "The name of the attribute to update.", то есть вроде бы это конкретный атрибут, а не все.
Что я делаю не так?
Код: Выделить всё
public function behaviors()
{
return [
// Other behaviors
'timestamp' => [
'class' => TimestampBehavior::className(),
'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['registered_at'],
],
'value' => new Expression('NOW()'),
],
];
}
Код: Выделить всё
$client->touch('last_purchase');
Покопался в исходном коде метода touch - там вроде всё логично, в него передаёт атрибут, для него задаётся время ивента или текущее. не понимаю, как в этот метод попадает и второй атрибут. Если атрибуты берутся из настроек модуля поведения, то какой смысл в touch(конкретный атрибут), если всё равно обновляются все колонки? да и в документации к touch() написано: "The name of the attribute to update.", то есть вроде бы это конкретный атрибут, а не все.
Что я делаю не так?