PostgreSQL ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ new \yii\db\JsonExpression([],'json') ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ '{}::json', Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π² ΠΠ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ []
| Yii version | 2.0.14
| PHP version | 5.6
| Operating system | Debian
Thanks for posting in our issue tracker.
In order to properly assist you, we need additional information:
Thanks!
_This is an automated comment, triggered by adding the label status:need more info._
ΠΠ°ΠΊ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΠΎΡΡΠ³ΡΠ΅ΡΠ°, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ ΡΡΠΎΠ»Π±ΡΠ°?
ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ JsonExpression ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° Π½Π΅ ΠΌΠ°ΡΡΠΈΠ²Ρ?
PostgreSQL 9.6
ΠΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
$attributes['id'] = 210;
$attributes['steps'] = '';
$attributes['var'] = [];
Π² Π±Π°Π·Ρ ΠΏΠΈΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ° {"id":210,"steps":"","var":[]}
Π΄ΡΠΌΠ°Ρ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π΅Π΅ Π±ΡΠ΄Π΅Ρ {"id":210,"steps":"","var":{}}
ΠΠΎΠ½ΡΠ». @samdark @sergeymakinen ΠΊΠ°ΠΊ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ JSON_FORCE_OBJECT ΠΏΡΠΈ json_encode() Π² ArrayExpressionBuilder'e?
Π² JsonExpressionBuilder'e ?
Π² ArrayExpression ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ [] => {}
$attributes['var'] = new stdclass();
@SilverFire ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π½Π°Π΄ΠΎ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Builder (ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΡΠ΅, ΠΊΠΎΠΌΡ Π½Π°Π΄ΠΎ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΡΠ΅, ΠΊΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡ), ΠΈΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΡΠ²Π΅Ρ ΠΎΡ @cebe.
Π― Π±Ρ ΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠ°ΠΊ Π΅ΡΡΡ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π» ΡΠΏΡΠΎΡ Π½Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ
public function actionCreate($id) {
$model = new ModelName([
'id' => $id,
'var' => new \yii\db\JsonExpression((new \stdClass()), 'json'),
]);
if (isset($post['ModelName']['var'])) {
$post['ModelName']['var'] = new \yii\db\JsonExpression($post['ModelName']['var'], 'json');
}
.....
$model->load($post)
$model->save()
}
Π·Π°ΠΏΠΈΡΡ ΠΈΡΡΠΎΡΠΈΠΈ
public function afterSave($insert, $changedAttributes) {
self::writeHistory($this->tableName(), $insert ? 'insert' : 'update', $this->getAttributes(), $changedAttributes);
return parent::afterSave($insert, $changedAttributes);
}
public function afterDelete() {
self::writeHistory($this->tableName(), 'delete', $this->getAttributes());
return parent::afterDelete();
}
md5-1685c6b52513ddc1baf38a56c61b8ce3
public static function writeHistory($table_name, $action, $attributes, $changedAttributes = null) {
$id = $attributes['id'];
unset($attributes['id']);
if (gettype($attributes['var']) == 'object') {
$attributes['var'] = $attributes['var']->getValue();
}
\app\models\ModelHistory::writeHistory($id, $attributes, $changedAttributes, $table_name, $action);
}
ΠΠΎΠΏΡΡΡΠΈΠΌ new stdΠ‘lass(); ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΠ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ
ΡΠΎΠ³Π΄Π° ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Ρ PostgreSQL {} Π² Yii ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² [] (ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ΄Π°Π»Π½Π΅ΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Ρ {"var":{}}) ?
ΠΠ°ΠΉΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΡΠΎΠ³Π΄Π° ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Ρ PostgreSQL
{}Π² Yii ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²[](ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ΄Π°Π»Π½Π΅ΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Ρ{"var":{}}) ?
Π‘Π΅ΠΉΡΠ°Ρ JSON Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ². Π PHP Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ JSON Π»ΠΈΠ±ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ², Π»ΠΈΠ±ΠΎ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° \stdClass. ΠΠ΅Π»ΡΠ·Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ JSON Π² ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΡΠ°ΡΡΠΈΡΠ½ΠΎ βΒ Π² ΠΌΠ°ΡΡΠΈΠ².
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΏΡΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΌΠ°ΡΡΠΈΠ², JSON {} ΠΈ [] Π΄Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Π½Π°Π΄ΠΎ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Builder (ΠΈΠ½Π°ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄ΡΡ ΡΠ΅, ΠΊΠΎΠΌΡ Π½Π°Π΄ΠΎ ΠΌΠ°ΡΡΠΈΠ² ΠΈ ΡΠ΅, ΠΊΠΎΠΌΡ Π½ΡΠΆΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡ)
ΠΠΈΠ»Π΄Π΅Ρ βΒ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅. Π’Π°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π° Π»ΡΡΡΠ΅ β ΡΡ Π΅ΠΌΡ.
@Tigrov Ρ Π²Π°Ρ Π±ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ?
ΠΠΎΠΊΠ° ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡ Π½Π° 2.0.15
@SilverFire Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π΅ Π±ΡΠ»ΠΎ, Π½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ°ΠΌΠΎΠΌΡ Ρ ΡΡΠΈΠΌ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ.
ΡΠΎΠ³Π΄Π° ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ Ρ PostgreSQL {} Π² Yii ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ ΠΏΡΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° ΠΏΡΡΡΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² []
ΠΠΎΠΏΡΠΎΡ Π² ΡΠΎΠΌ, ΠΊΠΎΠΌΡ ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JSON Π² PHP. ΠΠ°ΠΊ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ (Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅).
@cebe Π²ΡΡΠ΅ Π΄Π°Π» ΡΠ°Π±ΠΎΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π² ΠΠ Π½ΡΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ {}. ΠΠΎ Π² PHP Π±ΡΠ΄Π΅Ρ Π²ΡΡ ΡΠΎΡ ΠΆΠ΅ ΠΌΠ°ΡΡΠΈΠ².
ΠΡΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° JSON Π½ΡΠΆΠ΅Π½ Π½Π΅ Π² PHP, Π° Π² JavaScript. ΠΠ΄Π΅ΡΡ ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ {} ΠΈΠ»ΠΈ []. Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ.
@Krakozaber Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ null Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°/ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ https://github.com/Tigrov/yii2-pgsql-audit
ΠΠ°ΠΊΡΡΠ²Π°Ρ ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π»ΡΠ±ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π°ΠΉΠ΄ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΊΠΎΠ², ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠΎΠ² + Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
Most helpful comment