YII — зачем использовать beforeSave (), когда вы можете кодировать перед функцией Save ()

Я в курсе функциональности функции beforeSave() в YII эта функция используется для выполнения чего-либо, что мы хотим выполнить до сохранения наших данных.

Однако, поскольку мы хотим реализовать это до того, как наши данные будут сохранены в базе данных, мы не можем напрямую написать этот код перед вызовом save () (-> save () хранит записи в базе данных)

Следовательно, я не уверен, почему именно нам нужно создать определенную функцию, такую ​​как beforeSave (), для выполнения действия, которое нам нужно запустить до вызова Save (), когда мы непосредственно пишем этот код перед строкой save ().

Может кто-нибудь, пожалуйста, объясните это? Я искал много по причине этого, но на каждой странице, он перенаправил на объяснение только функции beforeSave ().

3

Решение

Yii и другие MVC-фреймворки имеют такие функции.

Хотя вы можете написать свой код «до сохранения» в контроллере, до save() функция — это более рекомендуется и полезно использовать beforeSave() функция.

Причина 1: М в MVC

BeforeSave относится к модели, поэтому было бы логичнее иметь код, который обрабатывает свойства (поля) модели в файле модели, чем иметь этот код в контроллере.

Причина 2: сохранение для вставки & Обновить

Ты используешь save() когда ты insert новая запись, а также когда вы update существующая запись. Без использования beforeSave встроенная функция, вам придется иметь 2 экземпляра вашего «руководства» перед сохранением кода. («Отходы» строк кода)

Причина 3: сохранение модели из другого контроллера

Что если вам будет предложено расширить ваше приложение, и теперь вам придется столкнуться с новым контроллером, которому необходимо сохранить ту же модель (по какой-то причине — просто возможный сценарий) — вам придется скопировать свое «перед сохранением» «код для этого контроллера. Хотя, если вы используете встроенный beforeSave функция — ты не.

В заключение, Основное назначение фреймворков — сократить объем кода, который вам нужно написать, сохраняя при этом что-либо логичное (разделение MVC) Хотя вы можете делать вещи по-другому, почему бы не использовать то, что уже существует?

11

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

Простой пример:

У меня есть таблица с двумя полями даты. Каждый раз, когда я пытаюсь выполнить вставку или обновление, мне нужно получить текущую системную дату и выполнить свою операцию в зависимости от типа операции.

public function beforeSave() {

if ($this->isNewRecord) {
$this->insertDate = new CDbExpression('NOW()');
} else {
$this->updateDate = new CDbExpression('NOW()');
}

return parent::beforeSave();
}

Я написал это один раз, поэтому мне не нужно писать каждый раз, когда я вызываю save () для этого объекта.

Также некоторые базы данных предпочитают разные форматы времени, поэтому вы можете справиться с ними здесь:

public function beforeSave() {
$this->date = date('Y-m-d', $this->date);
return parent::beforeSave();
}
4

По вопросам рекламы [email protected]