Cake PHP автоматические формы и несколько таблиц - PullRequest
2 голосов
/ 13 июля 2009

У меня есть форма со следующими полями:

  • Имя * * 1004
  • lastName
  • EMAILADDRESS

, за которыми следуют (до) десяти полей имени / адреса электронной почты, например

  • friendName-1
  • friendEmail-1
  • friendName-2
  • friendEmail-2 ... и т.д.

Поля firstName, lastName и emailAddress будут сохранены в таблице «переходов», а 10 пар «имя / адрес электронной почты» будут добавлены в таблицу «друзей», содержащую внешний ключ refferal_id.

Обычно я использую «автоматические» формы cakephp, настраиваю свою проверку в модели и делаю $this->model->save(); Если это не удается, я возвращаюсь к правилам проверки моей модели, и сообщения об ошибках попадают обратно в мою форму. Html , Нет проблем.

Как бы я это сделал для ДВУХ столов? Я думаю, что автоматические вещи - это не тот путь, но я чувствую, что без этого многое потеряю, например, проверку в моих моделях и пользовательские сообщения об ошибках.

Есть ли счастливая среда? Я довольно новичок в приготовлении торта, поэтому мне интересно, есть ли способ использовать автоматические с несколькими столами.

Ответы [ 2 ]

6 голосов
/ 13 июля 2009

См. http://book.cakephp.org/view/84/Saving-Related-Model-Data-hasOne-hasMany-belongsTo

Создайте отношения в своей модели рефералов:

var $hasMany = array('Friend');

По сути, убедитесь, что вы правильно назвали свои поля, например,

echo $form->create('Referral');
echo $form->input('first_name');
echo $form->input('last_name');
echo $form->input('email');
foreach (range(0,9) as $index) {
  echo $form->input('Friend.'.$index.'.name');
  echo $form->input('Friend.'.$index.'.email');
}
echo $form->end();

А у ваших рефералов контроллер:

function add() {
   if(!empty($this->data)) {
      $this->Referral->saveAll($this->data, array('validate'=>'first'));
   }
}
2 голосов
/ 13 июля 2009

Во-первых, я действительно надеюсь, что у вас нет 20 полей в таблице с именами «friendName-1», «friendEmail-1» и т. Д. Ваша вторая таблица должна содержать 3 поля - ваш referral_id, friendname и friendemail. Если вы не хотите нормализоваться, тогда вам не нужна вторая таблица.

Но я отвлекся, способ сохранить ваши автоматические формы - это добавить " hasMany " в вашу модель рефералов и / или " относится к " в вашей модели "друзей" , Тогда вы все еще можете использовать FormHelper и Model-> Save ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...