【问题标题】:CakePHP 3 - Users belongsToMany UsersCakePHP 3 - 用户属于多用户
【发布时间】:2015-12-28 10:07:54
【问题描述】:

我有一个特定的请求,要在用户之间建立关联。这让我很困惑,如何减少重复的关联、查询和结果?

起点应该是这样的?

// UsersTable
$this->belongsToMany('Users', [
            'through' => 'Connections',
        ]);

如何在一个查询中获取所有关联,无论用户键入“user_from”还是“user_to”字段?

【问题讨论】:

    标签: cakephp orm associations cakephp-3.0


    【解决方案1】:

    使用别名怎么样?

    您的users 表:

    class UsersTable extends Table 
    {
    
        public function initialize(array $config)
        {
            $this->hasMany('ToConnections', [
                'className' => 'Connections',
                'foreignKey' => 'user_to'
            ]);
    
            $this->hasMany('FromConnections', [
                'className' => 'Connections',
                'foreignKey' => 'user_from'
            ]);
    
        }
    }
    

    还有你的connections 表:

    class ConnectionsTable extends Table 
    {
    
        public function initialize(array $config)
        {
            $this->belongsTo('ToUsers', [
                'className' => 'Users',
                'foreignKey' => 'user_to'
            ]);
    
            $this->belongsTo('FromUsers', [
                'className' => 'Users',
                'foreignKey' => 'user_from'
            ]);
    
        }
    }
    

    然后您可以根据需要使用contain() 加载关联模型。

    $query = $conections->find()->contain([
        'ToUsers',
        'FromUsers'
    ]);
    
    $recipients = TableRegistry::get('users');
    $query = $recipients->find()->contain([
        'ToConnections.FromUsers',
    ]);
    

    【讨论】:

    • 正确,为您的关系使用别名将是最好的用例。
    • 我考虑过这种方法。但这给了我们两个联想。结果应按日期排序
    • @Salines $connections->find() 应该允许您通过dateuser_fromuser_to 进行搜索。
    • 因为它是belongsTo 关联,您甚至可以按ToUsers.emailFromUsers.role 等字段进行搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多