CakePHP 3.0-关联和#x27;propertyName';不应用于查询
设置关联后,我将使用适当的containable运行分页,并将得到预期的结果。但是,我想对数据进行命名,以将其与表之间已经建立的关联区分开来 我使用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-&
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