ActiveRecord - ассоциирование внешних ключей с различными соглашениями об именах? - PullRequest
0 голосов
/ 31 октября 2011

Я работаю в частной системе обмена сообщениями, используя PHP-ActiveRecord ORM.У меня есть модели под названием «Пользователь» и «Сообщение», таблицы MySQL под названием «пользователи» и «сообщения», а в таблице сообщений есть поля с именами «sender_id» и «receient_id».Однако я понятия не имею, как правильно связать отправителей и получателей с моделью пользователя.

Это то, что я имею до сих пор в модели пользователя:

static $has_many = array(
    array('messages'),
    array('recipients', 'foreign_key' => 'recipient_id', 'class_name' => 'Message'),
    array('senders', 'foreign_key' => 'sender_id', 'class_name' => 'Message'),
);

, и это то, что ядо сих пор в модели сообщений:

static $belongs_to = array(
    array('sender', 'class_name' => 'User'),
    array('recipient', 'class_name' => 'User'),
);

Однако, когда я запускаю код, такой как $ message-> receient-> first_name, он не правильно извлекает имя из модели User, как яхочу этого.Я не уверен, что я делаю неправильно.

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

Любая помощь будет принята с благодарностью,Я использую PHP-ActiveRecord ORM.Я думаю, что версия Rails более широко используется, но, насколько я понимаю, они работают одинаково, за исключением разного синтаксиса.

1 Ответ

1 голос
/ 15 марта 2012

Вам также необходимо указать внешние ключи в $ own_to, иначе они будут выведены из имени таблицы (т.е. user_id):

static $belongs_to = array(
   array('sender', 'class_name' => 'User', 'foreign_key' => 'sender_id'),
   array('recipient', 'class_name' => 'User', 'foreign_key' => 'recipient_id'),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...