2014-08-11 6 views
0

У меня возникли проблемы с CakePHP belongsTo и hasAndBelongsToMany отношения в CakePHP 2.xCakePHP hasOne Модель и hasAndBelongsToMany Модель

Пример ситуации

Таблица пользователей

id 
organisation_id 

Таблица организации

id 
name 

Таблица user_organisation_permissions

id 
user_id 
organisation_id 

UserModel

hasAndBelongsToMany(Organisation); 
belongsTo(Organisation) 

Пользователь принадлежит к одной организации, но она имеет разрешения на нескольких организаций, что приводит к следующему противоречию:

$aUser = $this->User->findById(1); 
print_r($aUser); 

// Output 

# With the belongsTo relation 
array(
    'User' => array(
     'id' => 1, 
     'organisation_id' => 1 
     'name' => 'Test User' 
    ), 
    'Organisation' => array(
     'id' => 1, 
     'name' => 'Test organisation' 
    ) 
); 

# With the hasAndBelongsToMany relation 
array(
    'User' => array(
     'id' => 1, 
     'organisation_id' => 1 
     'name' => 'Test User' 
    ), 
    'Organisation' => array(
     1 => array(
      'id' => 1, 
      'name' => 'Test organisation' 
     ), 
     2 => array(
      'id' => 1, 
      'name' => 'Test organisation' 
     ) 
    ) 
); 

# When both relations are enabled it doesn't work 

У кого-нибудь есть решение для этого конфликта?

Есть ли «родное» решение CakePHP для этого конфликта?

+0

Что «конфликт» вы имеете в виду? ps, всегда упоминайте свою точную версию CakePHP! – ndm

+0

Хорошо, я добавил еще несколько объяснений. – Tijme

+0

Я вижу, что уже подозревали, что: [** Cookbook> Models> Association> Multiple relations to the same model **] (http://book.cakephp.org/2.0/en/models/associations-linking-models-together .html # multiple-relations-to-the-same-model) – ndm

ответ

0

Ответ на самом деле в Cookbook CakePHP 2.x.

Множественные отношения к одной и той же модели

Есть случаи, когда модель имеет более одного отношения к другой модели. Например, у вас может быть модель сообщения, которая имеет два отношения к модели пользователя: одно отношение к пользователю, которое отправляет сообщение, а второе - пользователю, который получает сообщение. Таблица сообщений будет иметь поле user_id, но также поле recipient_id. Теперь ваша модель Сообщение может выглядеть примерно так:

class Message extends AppModel { 
    public $belongsTo = array(
     'Sender' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id' 
     ), 
     'Recipient' => array(
      'className' => 'User', 
      'foreignKey' => 'recipient_id' 
     ) 
    ); 
} 

Источник: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#multiple-relations-to-the-same-model

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