-1

Model_Comment を持つ可能性のある Model_Post があるとします。

updated_at新しいコメントが保存されるたびに Model_Postのフィールドが更新される方法はありますか? オブザーバーのドキュメントを確認しましたが、「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();
4

3 に答える 3

1

オブザーバーをいじる代わりに、ORM 中心のアプローチが必要な場合は、親をフェッチし、updated_at を更新してから、ORM を介して両方のオブジェクトを DB にコミットできます。

ただし、オブザーバー構成全体を実装しているわけではありません。プロパティ キーと 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

于 2014-11-14T07:04:52.747 に答える