ORM:更改父母" updated_at"模型在FuelPHP中更新时的时间戳

时间:2014-11-14 05:11:35

标签: php fuelphp fuelphp-orm

假设我有一个拥有Model_Comment的Model_Post。

每次保存新评论时,是否有任何方式可以更新Model_Post的updated_at字段?我查看了观察员的文档,但我找不到如何以“ORM方式”做到这一点。

此代码似乎不起作用:

class Model_Comment extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'post_id',
        'text',

    );
    protected static $_belongs_to = array('post');
    protected static $_observers  = array(
        'Orm\\Observer_UpdatedAt' => array(
            'events'          => array('before_save'),
            'relations'       => array('post')
        )
    );
}

class Model_Post extends Model
{

    protected static $_properties = array(
        'id',
        'title',
        'text',
        'updated_at'
    );
    protected static $_has_many   = array('comments');
}

我使用以下代码创建了一条新评论:

$comment             = Model_Comment::forge();
$comment->message_id = Input::post('message_id');
$comment->text       = Input::post('text');
$comment->save();

3 个答案:

答案 0 :(得分:1)

您可以获取父级,更新其updated_at,然后通过ORM将这两个对象提交到数据库,而不是与观察者混在一起,看到您想要以ORM为中心的方法。

但是,你没有实现整个观察者配置:您缺少属性键和mysql_timestamp键。

// Adding it with config:
// - only needs to run on before_save
// - use mysql timestamp (uses UNIX timestamp by default)
// - use just "updated" instead of "updated_at"
protected static $_observers = array(
    'Orm\\Observer_UpdatedAt' => array(
        'events' => array('before_save'),
        'mysql_timestamp' => true,
        'property' => 'updated',
        'relations' => array(
            'my_relation',
        ),
    ),
);

FuelPHP Observer_UpdatedAt

答案 1 :(得分:1)

如果您使用观察者配置的relations属性,则可以在关系更改时进行updated_at更新。只要您的子模型与父模型有关系,您就可以将关系名称添加到relations属性中,当您保存模型时,ORM将为您完成剩下的工作。

请参阅documentation中代码示例下的第一段。

答案 2 :(得分:0)

最后,由于Uru's comments,我找到了做到这一点的方法。

此代码现在可以正常使用;它比我想象的要简单。

型号:

class Model_Comment extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'post_id',
        'text',
    );
    protected static $_belongs_to = array('post');
}

class Model_Post extends \Orm\Model
{
    protected static $_properties = array(
        'id',
        'title',
        'text',
        'updated_at'
    );
    protected static $_has_many  = array('comments');
    protected static $_observers = array('Orm\Observer_UpdatedAt');
 }

在控制器中:

$comment       = Model_Comment::forge();
$comment->text = Input::post('text');
$parent_post   = Model_Message::find(Input::post('post_id'));

$parent_post->comments[] = $comment;
$parent_post->save();