ORM: изменить родительский тег «updated_at» временные метки, когда модель обновляется в переполнении FuelStack

Допустим, у меня есть Model_Post, который имеет_may Model_Comment.

Есть ли способ, которым 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();

-1

Решение

Вместо того, чтобы дурачиться с наблюдателями, видя, что вы хотите ORM-ориентированный подход, вы можете выбрать родителя, обновить его updated_at, а затем зафиксировать оба объекта в БД через 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

Другие решения

Если вы используете relations Свойство конфигурации наблюдателя вы можете иметь updated_at обновлять, когда отношения меняются. Пока ваша дочерняя модель имеет отношение к родительской модели, вы можете добавить имя отношения в relations собственность и ORM сделают все остальное за вас, когда вы сохраните модель.

Пожалуйста, смотрите первый абзац под образцом кода в документация.

1

Наконец-то я нашел способ сделать это благодаря Ура-х Комментарии.

Этот код работает сейчас, как я хотел; это было проще, чем я думал.

Модели:

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();
0
По вопросам рекламы [email protected]