Cakephp查找行为包含不起作用

时间:2012-11-05 14:19:06

标签: php cakephp

我有三个模特

  1. 用户
  2. 注意(与邮寄相同)
  3. 友谊
  4. 我正在尝试检索由我订阅的用户共享的帖子。

    我在UsersController中做的是我首先检索了所有朋友的列表

     $lof=$this->User->Friendship->find('all', array('conditions'=>array('Friendship.user_from'=>$this->Auth->user('id')), 'contain'=>array('Friendship.user_to')));
    

    现在我想显示我朋友分享的所有帖子

    $allnotes= $this->User->Note->find('all', array('conditions'=>array('Note.user_id'=>array($lof)), 'order' => array('Note.created DESC')));
    

    这给了我一个错误

    Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Array' in 'where clause'
    
    SQL Query: SELECT `Note`.`id`, `Note`.`user_id`, `Note`.`notes`, `Note`.`created`,     `User`.`id`, `User`.`name`, `User`.`email`, `User`.`username`, `User`.`password`, `User`.`gender`, `User`.`dob`, `User`.`image`, `User`.`tmp_name`, `User`.`search` FROM `fyp`.`notes` AS `Note` LEFT JOIN `fyp`.`users` AS `User` ON (`Note`.`user_id` = `User`.`id`) WHERE `Note`.`user_id` = (Array) ORDER BY `Note`.`created` DESC
    

    我知道我正在尝试添加数组,但是当我尝试使用相同的查找查询时,它确实有用。

    $allnotes= $this->User->Note->find('all', array('conditions'=>array('Note.user_id'=>array(114,115)), 'order' => array('Note.created DESC')));
    

    从Friendship表中仅获取user_to的值并在我的查询中将其分配给Note.user_id的解决方案究竟是什么。

1 个答案:

答案 0 :(得分:1)

问题是你的$lof变量不包含id的数组。它将包含来自友谊模型的完整数据。如果您查看$lof变量的值,您应该看到我的意思。您可以使用debug()功能执行此操作。

要执行您想要执行的操作,您必须使用“list”查找方法并使用Friendship.user_to字段。像这样:

$lof = $this->User->Friendship->find('list', array(
    'fields' => array('Friendship.id', 'Friendship.user_to'),
    'conditions' => array(
        'Friendship.user_from' => $this->Auth->user('id')
));

然后找到你现在可以使用的所有笔记

$allnotes = $this->User->Note->find('all', array(
    'conditions' => array(
         'Note.user_id' => $lof
     ),
     'order' => array('Note.created DESC')
));

您可以在CakePHP's cookbook

中详细了解不同的查找方法(我已链接到列表中)