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 模型提供了类似 beforeSaveafterFetch 的功能,您可以使用它们将 id 转换为整数。

此问题的正确问题是 https://github.com/phalcon/cphalcon/issues/13002,现已解决。 只需使用

Model::setup([ 'castLastInsertIdToInt' => TRUE ]);

在您的引导程序中全局激活解决方法