CakePHP 3 - 将实体字段FLOAT保存为INTEGER

时间:2018-05-06 13:43:31

标签: php mysql database cakephp-3.0

我需要将我的实体的一个字段保存为数据库中的Integer,但在应用程序中它应该被视为Float。

现在,我尝试使用像beforeSave,beforeMarshal等方法。 在数据库中,该字段标记为整数(11)。在我放的实体

 * @property float $price

但是,我的实体仍将此字段视为整数...

在下面的代码中(我把它放在Table类中),var_dump函数返回float只有一个地方 - 因为转换为这种类型。在其他地方,它是整数。

public function beforeSave(Event $event, EntityInterface $entity, \ArrayObject $options) {
    var_dump($entity->get('price'));
    die();
    $entity->set('price', $entity->get('price') * 100);
    return true;
}

public function beforeMarshal(Event $event, \ArrayObject $data, \ArrayObject $options)
{
    $data['price'] = (float) $data['price'];
    var_dump($data);
}

public function beforeRules(Event $event, EntityInterface $entity, \ArrayObject $options, $operation)
{
    var_dump($entity->get('price'));
}
public function afterRules(Event $event, EntityInterface $entity, \ArrayObject $options, $result, $operation)
{
    var_dump($entity->get('price'));
}

有没有人知道如何更改它,所以我将保存整数,但读取浮点数?

1 个答案:

答案 0 :(得分:0)

我知道你保存为INT但想要读作FLOAT。

我认为有两种解决方案。想象一下,我们有一个Products表/实体。

您可以在模板中使用数字助手:

<?php echo $this->Number->precision($product->price, 2); ?>

或者您在实体中创建了一个getter:

<?php
namespace App\Model\Entity;

use Cake\ORM\Entity;

class Product extends Entity
{
    protected function _getPrice($price)
    {
        return sprintf("%.2f", $price);
    }
}
?>

如果列价125中的值,它将返回125.00