2013-10-07 5 views
1

У меня есть пользователи, и у меня есть курсы. Я пытаюсь создать кнопку «Присоединиться» для пользователей, когда они просматривают список курсов, чтобы подписаться на курсы.Связанные объекты в CakePHP

мне сказали, чтобы использовать

class Course extends AppModel 
{ 
    public $hasAndBelongsToMany = array('User'); 
} 

и

class User extends AppModel 
{ 
    public $hasAndBelongsToMany = array('Course'); 
} 

Но я не знаю, как реализовать фактическую кнопку и проводку от информации к таблице называется courses_users

Где это реализовать?

Заранее благодарен!

ответ

1

Вы хотите отправить идентификатор студента и идентификатор курса в свой метод saveAll(). Вы можете сделать это через свой контроллер курсов следующим образом:

<?php 
class CoursesController extends AppController { 

    public function join($courseId) { 
     $data = array(
      'Course' => array(
       'id' => $courseId 
      ), 
      'Student' => array(
       'id' => $this->Auth->user('id') // ID of logged in user 
      ) 
     ); 

     if ($this->Course->saveAll($data)) { 
      $this->Session->setFlash(__('Successfully joined course.')); 
     } 
     else { 
      $this->Session->setFlash(__('Error joining course.')); 
     } 

     $this->redirect('/'); 
    } 
} 

Это простой пример. Вам нужно будет настроить его на свое приложение и добавить любую проверку и т. Д.

+1

CakePHP основан на принципе конвенции по конфигурации, когда у вас есть отношения HABTM между моделью курса и моделью пользователя, предполагается, что в вашей базе данных есть таблица books_users и автоматически будет записываться в нее при сохранении пользователей, связанных с Конечно, даже если функция называется $ this-> Course-> saveAll() (которая сохраняет связанные данные). – Chris

+0

@Chris это прекрасно на самом деле - он отлично работает, за исключением того, что, когда другой пользователь регистрируется для одного и того же курса, он записывает над файлом новое имя пользователя, даже если есть прикрепленный к обоим объектам $ hasAndBelongsToMany. Вы знаете, почему это произойдет? – itamar

+0

Поведение по умолчанию для сохранения данных HABTM для CakePHP состоит в том, чтобы удалить все записи, связанные с тем, который вы сохраняете, а затем создать их из ваших данных (как описано в ссылке ниже для уникальной опции): http: //book.cakephp. org/2.0/en/models/association-linking-models-together.html # hasandbelongstomany-habtm, решение состоит в том, чтобы объявить ваше отношение habtm к 'unique' => keepExisting. – Chris

3

Если вы такой новый, я бы предложил использовать утилиту для выпечки торта, которая будет проверять ваши таблицы, задавать некоторые вопросы о связях и строить модель, контроллер и представления для всех основных операций создания, обновления и удаления в вашей базе данных , Затем вы можете изменить их для своих нужд. Так я все еще делаю это, чтобы сэкономить много времени.

+0

AbraCadaver прав, вы получите выгоду от автоматически выпеченных моделей/контроллеров/просмотров, чтобы упростить основные задачи и узнать, как все проделано. Если вам нужен пользовательский интерфейс, а не консоль, чтобы испечь ваши файлы, используйте этот инструмент: http://patisserie.keensoftware.com/en/cakes – Chris

+0

Спасибо за подсказку, всем. Я обязательно проверю это. – itamar

Смежные вопросы