Как использовать более одной модели в контроллере CakePHP

#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)