【问题标题】:HABTM Cake php findHABTM 蛋糕 php 查找
【发布时间】:2014-12-05 03:47:27
【问题描述】:

我在下面有 HABTM 关联的表格。

user, group , groups_users

group , project, projects_groups

public $hasAndBelongsToMany = array(
            'Group' =>
            array(
                    'className' => 'Group',
                    'joinTable' => 'groups_users',
                    'foreignKey' => 'user_id',
                    'associationForeignKey' => 'group_id',
                    'unique' => 'keepExisting',
                    'conditions' => '',
                    'fields' => '',
                    'order' => '',
                    'limit' => '',
                    'offset' => '',
                    'finderQuery' => ''
            )
    );

我正在尝试获取所有用户,作为复选框列表,这些用户在使用项目 ID 的项目中,使用下面的查询

$users = $this->User->Group->Project->find('list', 
            array(
                  'conditions' => array('Project.id' => $this->Session->read('Projectid'))
                  ,'contain' => array(
                          'User' => array( 'fields' => 'User.id', 'User.email') 
                    )
            )
        );

但下面有错误

模型“项目”与模型“用户”没有关联

我实际上已经尝试了不同的方法来使其正常工作,但似乎无法做到正确,我怎样才能实现我想要的。干杯

【问题讨论】:

  • 这只能通过蛋糕手册中的连接查找连接来完成
  • $users = $this->User->Group->Project->find('list', array( 'conditions' => array('Project.id' => $this-> Session->read('Projectid')) ,'contain' => array( Group=>array('User' => array('fields' => 'User.id', 'User.email') ) ) ) );
  • 我不知道最好的方法,但是尝试自定义 sql 查询怎么样?
  • @Cakephp.Saint 我试过那个代码,说Model "User" is not associated with model "User"
  • 如果正确定义了关系..那么我的代码将工作..我认为模式文件中的关系问题

标签: php cakephp associations has-and-belongs-to-many


【解决方案1】:

我通过连接实现了我想要的,有没有办法通过使用模型关联而不是手动连接选项来做到这一点?

    $options['joins'] = array(
        array('table' => 'groups_users',
            'alias' => 'gu',
            'type' => 'LEFT',
            'conditions' => array(
                'gu.user_id = User.id',
             ) 
        ),
        array('table' => 'projectGroups',
            'alias' => 'pg',
            'type' => 'LEFT',
            'conditions' => array(
                'pg.group_id = gu.group_id',
             ) 
        )
    );

    $this->User->recursive = -1;
    $options['conditions'] = array(
                    'pg.project_id = ' =>  $this->Session->read('Projectid'),
                    'User.Active = ' => true  
    );
    $users = $this->User->find('list', $options);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多