CakePHPの:モデルに関連するデータフィールドを含む仮想フィールド
-
26-09-2019 - |
質問
私は住所・モデルをに属しますモデルの従業員を持っています。私は従業員モデルからデータをフェッチすると、関連するアドレスレコードがあまりにもフェッチを取得します。また、アドレス・モデルは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
...
)
TISがちょうど
を追加することによって解決することはできません$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する
1.3でvirtualFieldsの実装にはいくつかの制限があります。 まず、あなたがのために関連付けられているモデルで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`)"
);
}