Phalcon ORM - 整数字段 id 保存后为字符串
Phalcon ORM - integer field id is string after save
我正在为我当前的项目使用 Phalcon,我发现类型转换有一些奇怪的行为。
我有这个型号
class Customer extends Model {
protected $id;
protected $name;
}
在我的服务中,我保存了一个新的 Customer
模型,如下所示:
$customer = new Customer();
$customer->name = 'test';
$customer->save();
var_dump($customer->id);
我面临的问题是 id
是一个字符串,而不是 integer
。在 db
中,恶魔当然是一个自动递增的 int,主键。
此外,我已经在我的数据库连接中添加了这些行
\Pdo::ATTR_PERSISTENT => false,
\Pdo::ATTR_EMULATE_PREPARES => false,
\Pdo::ATTR_STRINGIFY_FETCHES => false,
这只能解决从数据库中提取时的问题,而不能解决保存时的问题。
我不想使用 getter 作为 id,因为我已经用魔术 setters/getters 实现了另一个功能。
关于这个问题的任何解决方案?
您似乎试图在对象范围之外定义 protected $name
属性。
您应该制作 属性 $name
public 或像 $customer->setName('test');
一样使用 setter
Phalcon 模型提供了类似 beforeSave
和 afterFetch
的功能,您可以使用它们将 id 转换为整数。
此问题的正确问题是 https://github.com/phalcon/cphalcon/issues/13002,现已解决。
只需使用
Model::setup([ 'castLastInsertIdToInt' => TRUE ]);
在您的引导程序中全局激活解决方法
我正在为我当前的项目使用 Phalcon,我发现类型转换有一些奇怪的行为。
我有这个型号
class Customer extends Model {
protected $id;
protected $name;
}
在我的服务中,我保存了一个新的 Customer
模型,如下所示:
$customer = new Customer();
$customer->name = 'test';
$customer->save();
var_dump($customer->id);
我面临的问题是 id
是一个字符串,而不是 integer
。在 db
中,恶魔当然是一个自动递增的 int,主键。
此外,我已经在我的数据库连接中添加了这些行
\Pdo::ATTR_PERSISTENT => false,
\Pdo::ATTR_EMULATE_PREPARES => false,
\Pdo::ATTR_STRINGIFY_FETCHES => false,
这只能解决从数据库中提取时的问题,而不能解决保存时的问题。
我不想使用 getter 作为 id,因为我已经用魔术 setters/getters 实现了另一个功能。
关于这个问题的任何解决方案?
您似乎试图在对象范围之外定义 protected $name
属性。
您应该制作 属性 $name
public 或像 $customer->setName('test');
Phalcon 模型提供了类似 beforeSave
和 afterFetch
的功能,您可以使用它们将 id 转换为整数。
此问题的正确问题是 https://github.com/phalcon/cphalcon/issues/13002,现已解决。 只需使用
Model::setup([ 'castLastInsertIdToInt' => TRUE ]);
在您的引导程序中全局激活解决方法