CakePHP的:含有机种相关的数据字段虚拟字段
-
26-09-2019 - |
题
我有哪些属于关联的地址-model的模范员工。当我从雇员模型获取数据,相关的地址记录变得牵强了。此外,该地址模型具有virtualField FULL_NAME。这看起来像这样:
Array
(
[0] => Array
(
[Employee] => Array
(
[id] => 1
[address_id] => 33
[username] => ...
...
)
[Address] => Array
(
[id] => 33
[firstname] => Blah
[full_name] => Blah Blubb
...
)
)
[1] => Array (
[Employee] => Array (
[id] => 2
...
我想在数据阵列的雇员部分已经包括在本virtualField太像
Array (
[0] => Array (
[Employee] => Array
(
[id] => 1
[full_name] => Blah Blubb
...
)
提斯是不可能仅仅通过增加来解决
$virtualFields = array(
'full_name' => 'CONCAT_WS(" ", Address.firstname, Address.surname)',
);
到雇员模型,如食谱指出 提出了一种解决方案(“从一个模式到另一个运行时复制virtualFields当你需要访问他们”),但我不明白这一点的解决方案。我在哪里有把这个?在控制器?在查找功能模型?
感谢帮助
解决方案 2
我的手现在在一个afterFind模型回调函数这样做:
array_walk($results,function(&$a){
if(isset($a['Address']['full_name'])) {
$a['Employee']['full_name'] = $a['Address']['full_name'];
unset($a['Address']);
}
});
可能是它不是很好,但它的工作原理。
其他提示
HTTP://书。 cakephp.org/view/1608/Virtual-fields#Virtual-fields-and-model-aliases-1632
virtualFields的1.3的实施方案具有一些限制。 首先,你不能对相关机型使用virtualFields 条件,顺序,或字段阵列。这样做通常会导致 SQL错误的领域不被ORM取代。这是 因为它是很难估计的,其相关的深度 模型可能被发现。
以下内容添加到您的模型:
public function __construct($id=false,$table=null,$ds=null){
parent::__construct($id,$table,$ds);
$this->virtualFields = array(
'full_name'=>"CONCAT(`Address.firstname`,' ',`Address.surname`)"
);
}
不隶属于 StackOverflow