小编Wis*_*d0m的帖子

如何使用CakePHP 3连接多个表?

我正在使用CakePHP 3.x.

我想要的是能够调用$ this-> Categories-> find()然后加入Topics.cat_id = Categories.id上的主题,然后加入Posts.topic_id = Topics.id上的帖子.

我没有得到任何错误,但我收到的唯一数据是类别数据,我尝试过LEFT和INNER加入但没有成功.任何帮助将不胜感激.

表关系是:

CategoriesTable

$this->hasMany('Topics');
Run Code Online (Sandbox Code Playgroud)

TopicsTable

$this->belongsTo('Categories');
$this->hasMany('Posts');
Run Code Online (Sandbox Code Playgroud)

PostsTable

$this->belongsTo('Topics');
Run Code Online (Sandbox Code Playgroud)

还有我的查询:

$query = $this->Categories->find('all')
        ->order(['Categories.name' => 'ASC'])
        ->join([
            'topics' => [
                'table' => 'Topics',
                'type' => 'LEFT',
                'conditions' => 'topics.Cat_id = Categories.id'
            ],
            'posts' => [
                'table' => 'Posts',
                'type' => 'LEFT',
                'conditions' => 'posts.topic_id = topics.id'
            ]
        ]);
Run Code Online (Sandbox Code Playgroud)

尝试使用可包含的行为但现在我使用此查询得到错误"类别与帖子无关":

$query = $this->Categories->find('all')
        ->order(['Categories.name' => 'ASC'])
        ->contain(['Topics', 'Posts' => function($q){
            return $q->where(['Posts.topic_id' => 'Topics.id']);
        }]);
Run Code Online (Sandbox Code Playgroud)

php mysql cakephp join cakephp-3.0

17
推荐指数
1
解决办法
2万
查看次数

CakePHP 3中同一模型的多个关联

我正在使用cakePHP版本3.x.

当我查询MessagesTable时,我想获取发送者和消息接收者的用户数据.我已经在cakePHP 2中多次这样做但我无法弄清楚为什么它不能在3.x版本中运行.

我有一个UsersTable和一个MessagesTable.

UsersTable

$this->hasMany('Messages');
Run Code Online (Sandbox Code Playgroud)

MessagesTable

$this->belongsTo('Users', [
    'foreignKey' => 'sender_id',
    'propertyName' => 'Sender',
]);
$this->belongsTo('Users', [
    'foreignKey' => 'user_id',
    'propertyName' => 'Receiver'
]);
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的查询

$messages = $this->Messages->find()
        ->where(['Messages.user_id' => $this->Auth->user('id')])
        ->orwhere(['Messages.sender_id' => $this->Auth->user('id')])
        ->order(['Messages.created' => 'DESC'])
        ->contain([
            'Users.Pictures',
        ]);
Run Code Online (Sandbox Code Playgroud)

我收回了Receiver数据,但也没有收到Sender数据.任何帮助将非常感激

php cakephp belongs-to model-associations cakephp-3.0

8
推荐指数
1
解决办法
3948
查看次数