我的控制器查询如下:
$built_arr = $this->User->query("SELECT u1.id,
CASE WHEN u1.role = 'CW' THEN u2.agency_name
WHEN u3.role = 'EU' THEN u2.agency_name ELSE u1.agency_name END AS agency
FROM users u1 LEFT JOIN users u2 ON (u1.parent = u2.id AND u2.role = 'A')
LEFT JOIN users u3 ON (u1.id = u3.parent AND u1.role = 'CW')
LEFT JOIN users u4 ON (u1.parent = u4.id AND u4.role = 'A')
WHERE u1.role = 'A' OR u1.role = 'CW'
GROUP BY u1.id");
此查询的数组代码如下:
if (isset($built_arr) && !empty($built_arr)) {
foreach ($built_arr AS $key => $value) {
if (isset($value[0]['agency']) && !empty($value[0]['agency'])) {
$agency_arr[$value['u1']['id']] = $value[0]['agency'];
}
}
}
现在我已将此数据设置为如下所示:
$this->set('agency_arr', $agency_arr);
现在这个数组(agency_arr),我已经在视图页面中用作表格列的数据。 现在我想用这个数组数据对该列进行排序。 我的观看代码如下:
<th><?php echo $this->Paginator->sort('?', __("Agency Name"), array('escape' => false)); ?></th>
对“?”的建议标志。 我必须写什么而不是“?”,所以我可以用我的数组数据排序。 我的其他列的数据来自分页查询,所以这些工作正常。 我需要对额外列进行额外查询,因此需要按该列进行排序。
答案 0 :(得分:0)
对排序问题:
Cake \ View \ Helper \ PaginatorHelper :: sort($ key,$ title = null,$ options = []) 参数:
$key (string) – The name of the column that the recordset should be sorted.
$title (string) – Title for the link. If $title is null $key will be used for the title and will be generated by inflection.
$options (array) – Options for sorting link.
所以我想这就是你想要的:$ paginator-&gt; sort('agency_name','Agency Name',array('escape'=&gt; false));
如果您还没有,我建议您正确设置关联,并使用包含查找调用。 由于有父母我猜它是一个HasAndBelongsToMany关系。 (孩子有多个父母和父母多个孩子)
CREATE TABLE `users` (
user_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
role varchar(255),
);
CREATE TABLE `childrens_parents` (
childrens_parents_id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
parent_id int,
children_id int,
FOREIGN KEY (u1_id) REFERENCES users(user_id),
FOREIGN KEY (u2_id) REFERENCES users(user_id)
);
在您的Model / UsersTable中正确设置关联,如中所述 cakephp书 (别忘了targetforeignkey + foreignkey)
现在你可以这样做:
$query = $this->Users->find()->where(['role'=>'A'])->orWhere(['role'=>'CW'])->contain([
'Children' => function ($q) {
return $q
->where(['Role =' => 'CW']);
}
])->contain([
'Parents' => function ($q) {
return $q
->where(['Role =' => 'A']);
}
])->group('user_id');
现在,您可以对结果集进行分页,访问对象的所有字段。
foreach($query as $row) {
debug($row);//see how nicely the resultarray is looking
echo($row->Parents[0]->user-id);// access related Entities
}
如果它不是HABTM但有很多或其他类型,你可以很容易地适应它。 我强烈建议举办蛋糕大会!
Ressources(我建议阅读整篇文章以获得正确的cakephp工作): http://book.cakephp.org/3.0/en/orm/query-builder.html http://book.cakephp.org/3.0/en/orm/associations.html