CakePHP, как определить две одинаковые модели через другую таблицу соединений с помощью hasMany через - PullRequest
0 голосов
/ 02 августа 2011

Я хотел бы использовать hasMany through отношение для соединения двух users через модель invitations

В настоящее время у меня есть следующий контроллер:

class User extends AppModel { 
var $name = 'User';
var $displayField = 'username';

var $hasMany = array(

    'Invitation' => array(
        'className' => 'Invitation',
        'foreignKey' => 'sender_user_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    ),
    'Invitation' => array(
        'className' => 'Invitation',
        'foreignKey' => 'receiver_user_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
    )
}

Однако, когда я получаю ошибку:

Error: Database table sender_users for model SenderUser was not found.

Это немного раздражает, потому что я уже думал, что указал, что хочу использовать Invitation.

В чем проблема, какой код я могу изменить?

1 Ответ

3 голосов
/ 02 августа 2011

Во-первых: вы не можете создать одну и ту же ассоциацию дважды.Даже с точки зрения синтаксиса PHP это невозможно.Вы должны будете дать каждой ассоциации уникальное имя:

public $hasMany = array(
    'SentInvitation'     => array(...),
    'ReceivedInvitation' => array(...)
);

Во-вторых, проблема в , вероятно, в том, что у вас нет модели приглашений.Cake создает модель на лету в соответствии с соглашениями об именах.Поскольку у вас есть столбец sender_user_id, в соответствии с соглашениями об именах у вас также должна быть таблица sender_users.Создайте модель приглашения и настройте ее без этой ассоциации, тогда Cake не должен ее искать.

...