3

結合されたテーブルの配列を介して動的クエリを作成しようとしています。これらは、競合 (一意でないエイリアス) を回避するために動的エイリアスを生成します。

ただし、結合されたテーブルには、処理されていない virtualFields がいくつかあります。さらに調べてみると、結合されたテーブル__construct()関数が呼び出されていないようです。

virtualFieldsCakePHP v2.2.8 で結合されたテーブルに乗る方法はありますか?

ありがとう

4

1 に答える 1

5

手動結合はモデルを使用しませ

手動結合はモデルを利用しません。手動結合を使用すると、手動で結合を定義し、エイリアスを指定できます。このエイリアスは既存のモデルと同じかもしれませんが、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'
        )
    ),
)
于 2013-05-27T07:11:33.097 に答える