2013-08-22 3 views
0

Две модели, о которых идет речь, - это проекты и события.Отношения в CakePHP

Ниже приведены соотношения:

var $belongsTo = array(
    'Project' => array(
     'className' => 'Project', 
     'foreignKey' => 'project_id' 

    ), 

var $hasMany = array(
    'Event' => array(
     'className' => 'Event', 
     'foreignKey' => false, 
     'dependent' => false, 

    ), 

Проблема заключается в том, что всякий раз, когда я пытаюсь перечислить все проект, только те, которые имеют событие, присоединенное перечислены. Я с нетерпением жду, чтобы это было решено.

Вот запрос, который я получаю:

ВЫБРАТЬ Event. id, Event. project_id, Event. user_id, Event. date, Event. hours, Event. minutes, Event. xhours, Event. xminutes, Event. xdetails, Event. assignment, Event. start_time, Project. id, Project. name, Project. customer_id, Project. project_nr, Project. address, Project. post_nr, Project. city, Project. company_id, User. id, User. employee_nr, User. name, User. surname, User. email, User. password, User. role, User. phone, User. address, User. post_nr, User. city, User. token_hash, User. company_id ОТ scheduling. events AS Event LEFT JOIN scheduling. projects AS Project ON (Event. project_id = Project. id) LEFT JOIN scheduling. users AS User о том, где 1 = 1 LIMIT 15

запрос, который я получаю после последнего обновления является следующее (Eventuser_id = Userid..):

ВЫБРАТЬ Event. id, Event. project_id, Event. user_id, Event. date, Event. hours, Event. minutes, Event. xhours, Event. xminutes, Event. xdetails, Event. assignment, Event. start_time, Event. material_id, Event. km_drive, Event.time_drive, Event. finish_time, Project. id, Project. name, Project. customer_id, Project. project_nr, Project. address, Project. post_nr, Project. city, Project. company_id, Project. color, User. id, User. employee_nr, User. name, User. surname, User. email, User. password, User. role, User. phone, User. address, User. post_nr, User. city, User. token_hash, User. company_id, User. car_id ОТ scheduling. events AS Event LEFT JOIN scheduling. projects AS Project ON (Event. project_id = Project. id) LEFT JOIN scheduling. users AS User о том, где 1 = 1 LIMIT 20

Вот массив, который я получаю при попытке к списку проектов (Eventuser_id = Userid..):

array(
(int) 0 => array(
    'Event' => array(
     'id' => '57', 
     'project_id' => '13', 
     'user_id' => '1', 
     'date' => '2013-08-07', 
     'hours' => '2', 
     'minutes' => '35', 
     'start_time' => '00:00:00', 

    ), 
    'Project' => array(
     'id' => '13', 
     'name' => 'new project', 
     'customer_id' => '2', 
     'project_nr' => '215', 
     'company_id' => '1', 
    ), 
    'User' => array(
     'password' => '*****', 
     'id' => '1', 
     'employee_nr' => null, 
     'role' => 'manager', 
     'phone' => '11 12 13 14', 
     'token_hash' => null, 
     'company_id' => '1', 
     'car_id' => null 
    ) 
), 
(int) 1 => array(
    'Event' => array(
     'id' => '72', 
      'project_id' => '13', 
     'user_id' => '1', 
     'date' => '2013-08-08', 
     'hours' => '5', 
     'minutes' => '35', 
     'start_time' => '00:00:00', 
    ), 
    'Project' => array(
        'id' => '13', 
     'name' => 'new project', 
     'customer_id' => '2', 
     'project_nr' => '215', 
     'company_id' => '1', 

    ), 
    'User' => array(
     'password' => '*****', 
     'id' => '1', 
     'employee_nr' => null, 
     'role' => 'manager', 
     'phone' => '11 12 13 14', 
     'token_hash' => null, 
     'company_id' => '1', 
     'car_id' => null 
    ) 
), 

Поэтому в основном я получаю список событий с соответствующими проектами и без соответствующих клиентов. То, что я хочу, чтобы получить массив так:

(int) 1 => array(
    'Project' => array(
        'id' => '13', 
     'name' => 'old project', 
     'customer_id' => '2', 
     'project_nr' => '215', 
    ), 
      'Customer' => array(
     'id' => '2', 
      'project_id' => '13', 
     'address' => 'abc', 
     'initials' => 'HUJ', 
    ), 
), 
+0

пожалуйста, добавьте свой запрос здесь, который вы использовали для извлечения проектов –

+0

Просьба предоставить вам запрос и сказать, что эти отношения есть в какой модели? –

+0

отношение brlongsTo находится в модели событий, а hasMany - в модели проекта. Я добавил вопрос к вопросу. – Domas

ответ

1

Модель событий

class Event extends AppModel { 
    public $actsAs = array('Containable'); 

    var $belongsTo = array(
     'Project' => array(
      'className' => 'Project', 
      'foreignKey' => 'project_id' 
     ), 
     // ... more relationships 
    ); 

Проект Модель

class Project extends AppModel { 
    public $actsAs = array('Containable'); 

    var $hasMany = array(
     'Event' => array(
      'className' => 'Event', 
      'foreignKey' => 'project_id' 
      'dependent' => false, 
     ), 
     // ... more relationships 
    ); 

Проекты Контроллер

class ProjectsController extends AppController { 

    public $paginate = array(
     'Project' => array(
      'contain' => array(
       'Event', 
       'User' 
      ) // end Project contain 
     ) // end Project pagination 
    ); // end pagination 

    public function index() { 
     $this->set('projects', $this->paginate()); 
    } 
+0

Но он по-прежнему возвращает только проекты, имеющие связанные с ними события. Я хочу, чтобы index() возвращал все проекты независимо от того, имеют ли они какие-либо события или нет. – Domas

+0

см. Обновленный foreignKey для проекта hasMany Event. – bowlerae

+0

Ну, он перечисляет все проекты сейчас, но каждый проект принадлежит клиенту, а в индексном представлении поле клиента пусто для каждого проекта. Несмотря на то, что в функции просмотра, где указан только один проект, к нему привязан клиент. – Domas

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