CakePHP возвращает неправильный столбец в поисковом запросе в отношении HABTM - PullRequest
0 голосов
/ 11 октября 2011

Некоторое время я боролся с этим поиском ().Для справки о таблицах см. Вопрос здесь: CakePHP Твиттер-клон: не удается заставить работать систему слежения .

Однако, короче говоря, это для клона Твиттера Iделаю для самообучения.У меня есть три стола.

Users (id, name)
Tweets (id, user_id, content, date)
UserUsers (id, user_id, follower_user_id)

В качестве моделей у меня есть пользователи, твиты и подписчики (пользователи HABTM).

Сейчас у меня есть запрос на поиск:

$this->User->bindModel(array('hasOne' => array('UserUsers')));  
        $fields = array('User.username');
        $conditions = array(
            'UserUsers.user_id'=> $current_id);
        $contain = $this->User->contain(array(
            'UserUsers',
            'Tweet' => array(
                'fields'=> array('Tweet.content', 'Tweet.date'),
                'order' => 'Tweet.date DESC',
                'limit' => 1)));

        $data = $this->User->find('all', compact('fields', 'conditions', 'contain'));

, которыйпроизводит этот оператор SQL, который почти то, что я хочу:

SELECT `User`.`username`, `User`.`id` FROM `users` AS `User` LEFT JOIN `user_users` AS `UserUsers` ON (`UserUsers`.`user_id` = `User`.`id`) WHERE `UserUsers`.`user_id` = 1 

Это очень близко, но он возвращает неправильный столбец в моей таблице.Я хотел бы привести следующий оператор SQL:

SELECT `User`.`username`, `User`.`id` FROM `users` AS `User` LEFT JOIN `user_users` AS `UserUsers` ON (`UserUsers`.`follower_user_id` = `User`.`id`) WHERE `UserUsers`.`user_id` = 1 

Любая помощь в настройке моего запроса find () будет принята с благодарностью!Спасибо!

1 Ответ

1 голос
/ 11 октября 2011

Ваш комментарий объясняет все это: D Вы сказали, что у вас есть что-то вроде этого:

var $hasAndBelongsToMany = array(
   'Follower' => array( 
       'className' => 'Follower',
       'joinTable' => 'user_users',
       'foreignKey' => 'user_id', 
       'associationForeignKey' => 'follower_user_id'
));

Этим вы говорите, что торт объединяет таблицу пользовательских моделей с user_users user.id = user_id (lookпо внешнему ключу), используя ваши условия, такие как UserUsers. user_id = 1, затем он соединит таблицу user_users с таблицей модели Follower, используя Follower.id = follower_user_id

Cake не будет выполнять SQL-запрос с объединениямидля HABTM или hasMany, так что то, что вы публикуете, это только первая часть, вы должны взглянуть на вторую часть.Так что то, что вы получаете, является нормальным поведением для этой находки, и в этом нет ничего плохого, проверьте свой дамп sql для другой части, и вы поймете, что я имею в виду: D

Вы можете сделать forceприсоединяйтесь вручную или попробуйте сделать поведение, подобное linkable

Надеюсь, это решит ваш вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...