結合されたテーブルの配列を介して動的クエリを作成しようとしています。これらは、競合 (一意でないエイリアス) を回避するために動的エイリアスを生成します。
ただし、結合されたテーブルには、処理されていない virtualFields がいくつかあります。さらに調べてみると、結合されたテーブル__construct()
関数が呼び出されていないようです。
virtualFields
CakePHP v2.2.8 で結合されたテーブルに乗る方法はありますか?
ありがとう
手動結合はモデルを利用しません。手動結合を使用すると、手動で結合を定義し、エイリアスを指定できます。このエイリアスは既存のモデルと同じかもしれませんが、CakePHP はあなたのモデルを結合テーブルに使用しません。
virtualFields が必要な場合は、使用するデータによっては、virtualField をクエリしている「メイン」モデルに移動できる場合があります。次に例を示します。
$this->Foo->virtualFields['foobar'] = 'CONCAT(\'Hello \', Bar.name)';
$foo = $this->Foo->find(
'all',
array(
'fields' => array(
'Foo.name',
'Foo.foobar',
),
'joins' => array(
array(
'table' => 'bars',
'alias' => 'Bar',
'type' => 'INNER',
'conditions' => array(
'Bar.id = Foo.bar_id',
)
)
),
'recursive' => -1
)
);
debug($foo);
戻り値;
array(
(int) 0 => array(
'Foo' => array(
'title' => 'Foo One',
'foobar' => 'Hello World'
)
),
(int) 1 => array(
'Foo' => array(
'title' => 'Foo Two',
'foobar' => 'Hello Planet'
)
),
)