2011-10-11 46 views
0

我一直在用find()查询摔跤一段时间。有关表格的参考,请参阅此处的问题:CakePHP Twitter-clone: Can't get follow-system to workCakePHP在HABTM关系中的查找查询中返回错误的列

但是,简而言之,这是一个我为自学而做的推特克隆。我有三张桌子。

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()查询将不胜感激!谢谢!

+0

您是否尝试过在你的用户模型'“associationForeignKey” =>“follower_user_id''? – Ross

+0

是的,我的用户模型具有这样的: \t变量$ hasAndBelongsToMany =阵列( '跟随'=>阵列( '的className'=> '跟随者', 'joinTable'=> 'USER_USERS', '外键' =>'user_id', 'associationForeignKey'=>'follower_user_id' ) ); – kurisukun

回答

1

您的评论可以解释这一切:d 你说,你有这样的事情:

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

这样,你就告诉蛋糕加盟与USER_USERS用户模型表格由user.id = USER_ID(看在外键)使用您的条件,如UserUsersuser_id = 1那么它会加入user_users表跟随者模型表使用Follower.id = follower_user_id

蛋糕不会做一个SQL查询与HABTM或hasMany的联接,所以你发布的只是第一部分,你应该看看第二部分。所以你得到的是这个发现的正常行为,没有什么错,它检查你的SQL转储的其他部分,你会明白我的意思:D

你可以做force join manually,或尝试做一个像linkable

希望这种行为上的解决你的问题

+0

谢谢!我在表格上使用了手动连接,这些连接起作用了! :) – kurisukun