php - CakePHP关联关系表

标签 php mysql cakephp model-view-controller cakephp-3.0

我需要建立诸如“Group hasMany users”和“User BelongToMany groups”之类的关联。

但我无法得到正确的结果,它总是使用错误的表groups_relations

我的模型:

class GroupsTable extends Table
{
    public function initialize(array $config)
    {
        $this->setTable('groups');
        $this->setDisplayField('title');
        $this->setPrimaryKey('id');

        $this->hasMany('Users', [
            'joinTable'     => 'groups_relations',
            'foreignKey'    => 'user_id',
        ]);
    }
}


class UsersTable extends Table
{
    public function initialize(array $config)
    {
        $this->table('user_users');
        $this->belongsToMany('Groups', [
            'joinTable'     => 'groups_relations',
            'foreignKey'    => 'group_id',
        ]);

    }
}

class GroupsRelationsTable extends Table
{
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->setTable('groups_relations');
        $this->setDisplayField('group_id');
        $this->setPrimaryKey('id');

           $this->belongsTo('Groups', [
                'foreignKey' => 'group_id',
                'joinType'   => 'INNER'
                ]);

            $this->belongsToMany('Users', [
                'foreignKey' => 'user_id',
                'joinType'   => 'INNER'
                ]);

        }
}

还有我的表groups_relations:

id |组 ID | user_id

我运行查询:

 $groupsWithUsers = $this->Groups->find('all', array(
        'contain' => array('Users')
        ));

我不明白如何告诉 cake 使用我的中间表并将结果附加到数组。

最佳答案

joinTable 不是 hasMany 关联的有效配置键。我认为您希望拥有群组 belongsToMany 用户。另一个线索是 hasManybelongsTo 的“对立面”,而 belongsToMany 则是它自己的对立面。 (也就是说,如果 A hasMany B,则 B belongsTo A,但如果 A belongsToMany B,则 B belongsToMany A.) 请注意,您还需要将 GroupsRelations 与 Users 的关联更改为 belongsTo

这段代码是为您编写的吗?因为它应该更了解。当我遇到粘性关联问题时,有时我会让 Cake 为我烘焙模型代码,然后看看结果与我编写的结果有何不同。

关于php - CakePHP关联关系表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850507/

相关文章:

PHP - 意外的全局,期待类中的字符串

javascript - 如何关闭浏览器后退按钮上的颜色框弹出窗口

php - 如何添加数据库中的每条最后记录?例如。 1 += 1

mysql - 按日期订购 2 张 table

java - 通过PreparedStatement更改受更新影响的列

CakePHP 错误信息位置

cakePHP - 修改后的字段未更新

php - 从 mysql 数组中回显特定值

php - Doctrine 在多列中搜索字符串

php - codeigniter 中的动态菜单和角色权限