Я скопировал следующий код с других сайтов и StackOverflow ответов (yii2 behaviors ActiveRecord::EVENT_BEFORE_INSERT not working) и не может заставить его работать:Yii2 Отметка Поведение возвращается 0000-00-00 00:00:00
public function behaviors()
{
return [
'timestamp' => [
'class' => \yii\behaviors\TimestampBehavior::className(),
'attributes' => [
\yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
\yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => new \yii\db\Expression('NOW()'),
],
];
}
Мои код модели заключается в следующем:
namespace app\models;
use Yii;
class Setting extends \yii\db\ActiveRecord
{
/*
* Autoupdate created_at and updated_at fields.
*/
public function behaviors()
{
return [
'timestamp' => [
'class' => \yii\behaviors\TimestampBehavior::className(),
'attributes' => [
\yii\db\ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
\yii\db\ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
],
'value' => new \yii\db\Expression('NOW()'),
],
];
}
/**
* @inheritdoc
*/
public static function tableName()
{
return 'settings';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['value'], 'required'],
[['value', 'reference', 'notes'], 'string'],
[['created_at', 'updated_at'], 'safe'],
[['property'], 'string', 'max' => 255]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'property' => 'Property',
'value' => 'Value',
'reference' => 'Reference',
'created_at' => 'Created At',
'updated_at' => 'Updated At',
'notes' => 'Notes',
];
}
/**
* Get a property
*/
public static function getSetting($property_name)
{
$setting = self::find()->where(['property' => $property_name])->one();
if(is_null($setting))
return NULL;
else
return $setting->value;
}
}
когда я создаю новый параметр, столбец created_at
и updated_at
установлен в 0000-00-00 00:00:00
, но когда я затем обновить строку снова, updated_at
работы. Похоже, что EVENT_BEFORE_INSERT не выполняется.
Каков типа данных столбцов? –
Временная метка, поэтому yyyy-mm-dd hh: mm: ss –
Проверьте это с помощью функции 'CURRENT_TIMESTAMP()'. –