我的模型定义如下:
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
use Cake\Database\Schema\Table as Schema;
class AppLogsTable extends Table
{
protected function _initializeSchema(Schema $schema) {
$schema->columnType('data', 'json');
return $schema;
}
}在保存到数据库和检索数据时,正确地应用了JSON格式。但是,如果我设置$appLog->data = null并通过$this->appLogs->save($appLog)保存它,它将把一个字符串null保存到数据库中,而不是一个真正的NULL值。data表中的colum app_logs设置为接受空。
如果取消对列类型定义的注释,它将正确地存储空。
如何保持自动JSON数据类型,并从模型中正确存储空?
发布于 2017-10-20 15:18:29
您必须使用一个自定义/扩展数据库类型类来相应地处理null值,无论发生什么,内置类都将通过json_encode()传递所有内容。
与此类似的东西:
// src/Database/Type/NullAwareJsonType.php
namespace App\Database\Type;
use Cake\Database\Driver;
use Cake\Database\Type\JsonType;
class NullAwareJsonType extends JsonType
{
public function toDatabase($value, Driver $driver)
{
if ($value === null) {
return null;
}
return parent::toDatabase($value, $driver);
}
}然后,您可以重写内置的json类型:
// config/bootstrap.php
\Cake\Database\Type::map('json', \App\Database\Type\NullAwareJsonType::class);或将其映射为新类型并相应地设置列类型:
\Cake\Database\Type::map('nullAwareJson', \App\Database\Type\NullAwareJsonType::class);$schema->columnType('data', 'nullAwareJson');另请参阅
https://stackoverflow.com/questions/41079398
复制相似问题