CakePHP Ассоциации — имеет много, но нужно сопоставить столбец в 3-й таблице?

Я новичок в CakePHP (2.x) и создаю функцию постов и комментариев. Все работает, за исключением того, что я не могу понять, как получить имя пользователя пользователя из регистрационной (третьей) таблицы (связанной с «registration_id»). Мои ассоциации в настоящее время выглядят так:

class Article extends AppModel {

public $hasMany = array('ArticleComment');

public $belongsTo = array(
'ArticleRegistration' => array(
'className' => 'Registration',
'foreignKey' => 'Article.registration_id'    //(doesn't work)
),
'ArticleCommentRegistration' => array(
'className' => 'Registration',
'foreignKey' => 'ArticleComment.registration_id'    //(doesn't work)
)
);

class ArticleComment extends AppModel {
public $belongsTo = array('Registration','Article');

Я не уверен, применяются ли ассоциации из ArticleComment, поскольку он вызывается через модель Article. Я получаю данные по:

$this->set('articles', $this->Article->find('all', array('order' => 'Article.created desc', 'limit' => '3')));

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

Таблицы являются:

articles
__________
id
registration_id
body

article_comments
__________
id
article_id
registration_id
body

registration
__________
id
username

Я собираю информацию с:

$this->set('articles', $this->Article->find('all', array('order' => 'Article.created desc')));

ТИА!

0

Решение

Сгенерированный SQL-запрос из CakePHP, когда вы делаете find() вызов выглядит следующим образом

SELECT `Article`.`id`,
`Article`.`registration_id`,
`Article`.`body`,
`Registration`.`id`,
`Registration`.`username`
FROM `test`.`articles` AS `Article`
LEFT JOIN `test`.`registration` AS `Registration`
ON (`Article`.`registration_id` = `Registration`.`id`)
WHERE 1 = 1 LIMIT 20

Итак, чтобы получить доступ к имени пользователя, вам просто нужно написать что-то подобное на ваш взгляд

$articles['Registration']['username'];

Я рекомендую вам использовать команды cakephp bake, я мог бы сделать этот проект примерно за 10 минут с ними. А также я рекомендую использовать Netbeans в качестве IDE, плагин cakephp потрясающий.

Вот ссылка на сайт в пример проекта, который вы можете клонировать с помощью git.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector