我有哪些属于关联的地址-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`)"
    );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top