Я в курсе функциональности функции beforeSave()
в YII эта функция используется для выполнения чего-либо, что мы хотим выполнить до сохранения наших данных.
Однако, поскольку мы хотим реализовать это до того, как наши данные будут сохранены в базе данных, мы не можем напрямую написать этот код перед вызовом save () (-> save () хранит записи в базе данных)
Следовательно, я не уверен, почему именно нам нужно создать определенную функцию, такую как beforeSave (), для выполнения действия, которое нам нужно запустить до вызова Save (), когда мы непосредственно пишем этот код перед строкой save ().
Может кто-нибудь, пожалуйста, объясните это? Я искал много по причине этого, но на каждой странице, он перенаправил на объяснение только функции beforeSave ().
Yii и другие MVC-фреймворки имеют такие функции.
Хотя вы можете написать свой код «до сохранения» в контроллере, до save()
функция — это более рекомендуется и полезно использовать beforeSave()
функция.
Причина 1: М в MVC
BeforeSave относится к модели, поэтому было бы логичнее иметь код, который обрабатывает свойства (поля) модели в файле модели, чем иметь этот код в контроллере.
Причина 2: сохранение для вставки & Обновить
Ты используешь save()
когда ты insert
новая запись, а также когда вы update
существующая запись. Без использования beforeSave
встроенная функция, вам придется иметь 2 экземпляра вашего «руководства» перед сохранением кода. («Отходы» строк кода)
Причина 3: сохранение модели из другого контроллера
Что если вам будет предложено расширить ваше приложение, и теперь вам придется столкнуться с новым контроллером, которому необходимо сохранить ту же модель (по какой-то причине — просто возможный сценарий) — вам придется скопировать свое «перед сохранением» «код для этого контроллера. Хотя, если вы используете встроенный beforeSave
функция — ты не.
В заключение, Основное назначение фреймворков — сократить объем кода, который вам нужно написать, сохраняя при этом что-либо логичное (разделение MVC) Хотя вы можете делать вещи по-другому, почему бы не использовать то, что уже существует?
Простой пример:
У меня есть таблица с двумя полями даты. Каждый раз, когда я пытаюсь выполнить вставку или обновление, мне нужно получить текущую системную дату и выполнить свою операцию в зависимости от типа операции.
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();
}