#cakephp #model #controller
#cakephp #Модель #контроллер
Вопрос:
Я создал регистрационную форму и отправляю данные контроллеру.
Я хочу вставить эти данные в 3 разные таблицы (модели).
Как этого можно достичь?
Комментарии:
1. ^^ -1 Использовать хранимые процедуры для манипулирования данными очень, очень неправильно. Вы не должны выполнять бизнес-логику на уровне сохранения. Я знаю, что существует множество устаревших приложений, полностью реализованных на SQL, но это просто неправильно. DB — это просто репозиторий, используйте его как единое целое.
2. Вопрос связан с CakePHP, поэтому хранимые процедуры неприменимы, поскольку вы можете включать логику — даже сложную логику — в свои модели. M часть MVC.
Ответ №1:
Вы имеете в виду (в терминах CakePHP), что вы хотите использовать больше моделей, чем по умолчанию. модель по умолчанию называется так же, как ваш контроллер.
Чтобы достичь желаемого, вы просто объявляете переменную $uses
в своем контроллере. Это делается следующим образом:
<?php
class ExampleController extends AppController {
var $name = 'Example';
// $uses is where you specify which models this controller uses
var $uses = array('Model1', 'Model2', 'ModelN');
// ... here go your controller actions (methods)
}
?>
Это позволит вашему контроллеру использовать Model1
, Model2
и ModelN
. Переименуйте их и добавьте больше в соответствии с вашими потребностями.
Если вы не хотите использовать модели в своем контроллере, вы можете назначить $uses
пустому массиву, т.Е.:
var $uses = array();
Взгляните на соответствующие главы книги CakePHP в зависимости от используемой версии:
Ответ №2:
До тех пор, пока ваши формы отформатированы в соответствии с соглашениями CakePHP и отношения между моделями будут настроены правильно, это будет сделано автоматически при вызове $this->Model->save($this->data)
.
Ответ №3:
На самом деле лучше всего загружать модель «на лету», поскольку таким образом вы не загружаете ее для всех методов, которые вам могут не понадобиться.
$this->loadModel('Model1');
Способ более эффективный.
Я бы также рекомендовал убедиться, что эти таблицы не связаны. Если они есть, то лучше всего объединить их в цепочку через:
$this->Model1->Model2->find();
Это начало обучения вас более эффективной работе с таблицами с помощью Containable и взаимосвязей (hasMany, belongsTo, HABTM)