Я новичок в 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')));
ТИА!
Сгенерированный 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.
Других решений пока нет …