【问题标题】:Phalcon behaviours not workingPhalcon 行为不起作用
【发布时间】:2018-07-27 20:23:52
【问题描述】:

我正在尝试让 Phalcon PHP 行为正常运行,但它在我的模型中没有按预期工作。这是我的模型的初始化函数:

public function initialize()
{
    $this->addBehavior(
        new Timestampable(
            [
                'beforeCreate' => [
                    'field'  => 'created_at',
                    'format' => 'Y-m-d H:i:s',
                ]
            ]
        )
    );

    $this->addBehavior(
        new Timestampable(
            [
                'beforeCreate' => [
                    'field'  => 'updated_at',
                    'format' => 'Y-m-d H:i:s',
                ]
            ]
        )
    );
}

当我在代码中创建新实例时,这不会将时间戳保存到数据库中。锁是这样保存的:

$lock = new TradesLocks();
$lock->trade_id = $id;
$lock->save();

我查看了 PhalconPHP 文档,也看不出我做错了什么。为什么它的行为不像预期的那样?

【问题讨论】:

    标签: php phalcon


    【解决方案1】:

    您确定模型中存在这些字段,并且如果您最近添加了它,您刷新了元数据?

    【讨论】:

    • 我有 public $created_atpublic $updated_at - 字段确实存在于数据库中(目前它们获得 NULL 值)。如何刷新元数据?
    • 取决于你的元数据适配器——如果是文件,清除文件,如果是内存缓存/redis,清除内存缓存/redis,如果是内存,那么你不需要做任何事情,除非你使用注释元数据- 那么你显然需要添加这样的注释。
    • 我想我正在使用标准元数据适配器。我该如何检查?
    【解决方案2】:

    我建议为您的表记录中的时间戳提供一个简单的解决方案。我一直在使用这种方法,效果很好。

    1) 在你的库文件夹中创建一个特征:

    <?php
    namespace Core\Traits;
    trait TimeStampable
    {
       public function beforeValidationOnCreate()
       {
          $this -> createdAt = date('Y-m-d H:i:s');
       }
    
       public function beforeUpdate()
       {
          $this -> updatedAt = date('Y-m-d H:i:s');
       }
    }
    

    2) 转到您的模型(或 ModelBase 类,如果您使用一个)。导入特征并使用它。

    <?php
    
    namespace Core\Models;
    
    use \Phalcon\Mvc\Model;
    use Core\Traits\TimeStampable;
    
    class TradesLocks extends Model
    {
        use TimeStampable;
    
        //Other code goes here...
    }
    

    3) 仅此而已。如果在其中一个事件(Model::beforeValidationOnCreate、Model::beforeUpdate)中执行操作,您可以这样做:

    public function beforeValidationOncreate()
    {
        //This makes sure the createdAt field gets the timestamp
        parent::initialize();
    
        //Other custom operations
        $this -> active = 'Y';
    }
    

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 2015-07-31
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多