CakePHP 3.0-关联和#x27;propertyName';不应用于查询

CakePHP 3.0-关联和#x27;propertyName';不应用于查询,cakephp,cakephp-3.0,Cakephp,Cakephp 3.0,设置关联后,我将使用适当的containable运行分页,并将得到预期的结果。但是,我想对数据进行命名,以将其与表之间已经建立的关联区分开来 我使用propertyName来执行这样的任务,但如果我这样做,结果是属性总是为null,我请求的containable将显示在表名下 例如: // MarksTable.php public function initialize(array $config) { $this->table('marks'); $this-&

设置关联后,我将使用适当的containable运行分页,并将得到预期的结果。但是,我想对数据进行命名,以将其与表之间已经建立的关联区分开来

我使用
propertyName
来执行这样的任务,但如果我这样做,结果是属性总是为null,我请求的containable将显示在表名下

例如:

// MarksTable.php    
public function initialize(array $config)
{
    $this->table('marks');
    $this->displayField('name');
    $this->primaryKey('id');
    $this->belongsTo('Hunts', [
        'foreignKey' => 'hunt_id'
    ]);
    $this->belongsTo('Winners', [
        'className' => 'Pictures',
        'foreignKey' => 'winner_id',
        'propertyName' => 'banana'
    ]);
    $this->hasMany('Submissions', [
        'className' => 'Pictures',
        'foreignKey' => 'mark_id',
        'propertyName' => 'submissions'
    ]);
}
以及控制器:

// AdminController.php

public function marks() {

    $this->paginate = [
        'contain' => ['Hunts.Games', 'Submissions.Users', 'Winners'],
        'order' => ['Marks.id' => 'DESC']
    ];

    $this->set('marks', $this->paginate('Marks'));
}
我得到的变量是:

对如何“重命名”协会有什么建议吗?我尝试了相同结果的倒数(即:
Pictures hasOne Winners
),属性名为
Mark
,而不是
banana
,但数据是正确的

编辑:表结构--


这个想法是,一旦这些图片被投票,一个标记(想想“提示”)将被更新为获胜的pictures.id。如果我们只需要抓取获得的分数,就可以节省一些SQL时间,如果需要,我们可以使用关联来查找相关图片(和picture.user)。不过,我会第一个承认这不是一个适合专栏的好地方。

与您当前的模式的关联应该是
hasOne
。对于
belongsTo
winner\u id
列需要位于
pictures
表中。未使用的属性名称看起来很奇怪,但是从转储来看,似乎实际使用了属性名称,但它还添加了一个使用关联名称的属性?您使用的是最新的稳定版本吗?您是否尝试过新的CakePHP安装?您是否尝试过减少容器以确定是否存在冲突?你的数据库模式到底是什么样子的?我已经更新了帖子,以显示这两个表的数据库结构。至于hasOne vs belongsTo——使用hasOne会导致cake查找图片。winner\u id。使用该类型关联的适当外键(mark\u id)不会让我将其“附加”到winner\u id,只有mark.id。是否有一些条件魔法可以用于建立此关联?至于测试条件,我使用的是3.0(这是稳定的,对吧!?),我还没有尝试过新的安装(因为我显然做错了什么,因为propertyName与其他关联一起工作)。是的,我已经删除了其他的容器。这个问题只发生在hasOne关联上吗?如果是这样的话,请在cakephp问题跟踪器中打开一张票证,这样就可以解决这个问题。我创建的belongsTo关联会发生这种情况。奇怪的是,以表('Pictures')命名关联并删除className参数“解决”了问题,并允许使用propertyName参数命名数据。当然,这意味着每当我包含获奖者时,我必须使用“图片”,当我想要包含所有图片时,我必须使用“提交”。我不喜欢它,但我现在可以用它了。
marks       Type        Null    Default
id          int(11)     No       
name        varchar(45) No       
hunt_id     int(11)     No       
winner_id   int(11)     Yes     NULL     


pictures    Type            Null    
id          int(11)         No       
user_id     int(11)         No       
mark_id     int(11)         No       
guid        varchar(255)    No       
timestamp   datetime        No