Phalcon使用MySQL例程

时间:2017-01-22 23:16:27

标签: phalcon

我有一个MySQL数据库,其GUID存储为主键的二进制(16)。我在插入和选择将id转换为GUID(GUIDToBinary()和BinaryToGUID())时使用MySQL用户定义的例程。

为了在Phalcon中使用我的例程,我正在设置'列' find()和findFirst()模型函数的参数现在意味着我正在使用不完整的对象,因为函数返回Phalcon \ Mvc \ Model \ Row的实例。

使用columns参数时docs状态发生以下情况;

  

返回特定列而不是模型中的完整列。什么时候   使用此选项将返回不完整的对象

UserController.php

// Returns Phalcon\Mvc\Model\Row
$incompleteUser = User::find(['columns' => 'BinaryToGUID(id) as id, status, username, password, .....']);

// Create a new user object to update
$user = new User();

// Populate with existing data
$user->assign($incompleteUser->toArray());

// Assign new changes requested by the user
$user->assign($this->request->getPost());

// Update
$user->updateUser(); 

user.php的

public function updateUser()
{
        $manager = $this->getModelsManager();

        return $manager->executeQuery("UPDATE User SET ..... WHERE id = GUIDToBinary(".$this->getDI()->get('db')->escapeString($this->id).")");
}

无论我是否明确定义了更新,都会因为模型处于暂态而执行插入。

我想到的一个解决方案是使用模型事件将二进制文件转换为GUID转换为Phalcon但是我无法在选择时找到合适的方法来执行转换。通过使用beforeSave()和beforeUpdate()事件可以更新/插入。也许我可以在模型中使用不同的属性getId()和getIdGuid(),但我希望尽可能避免这种情况。

有没有办法在Phalcon中使用MySQL用户定义的例程并为我的模型加水,使其保持持久状态?或者我是否需要沿着原始SQL路由进行更新并避免使用PHQL?

提前感谢您的时间。

0 个答案:

没有答案