设置关联后,我将运行一个包含正确包含的paginate,我将得到我想要的结果。但是,我想命名数据以区别于表之间已经建立的关联。
我使用propertyName
来执行此类任务,但是当我这样做时,结果是该属性始终为null,并且我要求的可包含内容将显示在表名下。
例如:
// 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
,但数据是正确的。
编辑:表格结构 -
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
这个想法是,一旦图片被投票,一个标记(思考'提示')将用获胜的图片更新.id。如果我们只需要获取哪些标记就可以节省一些SQL时间,如果需要,我们可以使用关联来查找相关图片(和picture.user)。不过,我会第一个承认它不是该专栏的好地方。