2017-07-15 16 views
1

CakePHP 2では、updateAllメソッドでエイリアスを使用できますが、CakePHP 3(テスト済み3.4.9)では別名を使用できませんか?CakePHP 3 updateAll with alias

$this->_table->updateAll([ 
    $this->_table->getAlias() . '.deleted' => Time::now() 
], [ 
    $this->_table->getAlias() . '.' . $this->_table->getPrimaryKey() => $entity->{$this->_table->getPrimaryKey()} 
]); 

あなたのテーブルがproductsで、別名は、それが作品だProductsですが、あなたのテーブルがcart_productsで、別名はCartProducts

SQLがどのように見えるべきである場合に動作しない場合:
UPDATE cart_products AS CartProducts SET... WHERE CartProducts.id = ...
の代わりに、
UPDATE cart_products SET... WHERE CartProducts.id = ...

私は上記のコードは私の動作からです。

+0

"_doesn't work_"は適切な問題の説明ではありません。問題がCakePHPの内部を知っている人にとって明白であっても、_exactly_が何を起しているのか、そして_確実に_何が起こるのかについて常にできるだけ具体的にしてください。私は問題は、結果のクエリには 'UPDATE'節にエイリアスが含まれるが、' WHERE'節にはエイリアスが含まれないということだろうか? – ndm

+0

SQLコードを追加しました。SQLは 'UPDATE cart_products SET ... WHERE CartProducts.id = ...'のように見えます。 「cart_products」の後に「AS Cart Products」がありません – kicaj

+0

生成されたSQLはどこにありますか?私は 'WHERE'節がエイリアスを持たないことを期待しています(理由は後ほど説明します)。3.4.9の簡単なテストでは、私にとっては' SET'節のエイリアスが正確に表示されますが、 'WHERE'節。 – ndm

答えて

1

updateAll()クエリでエイリアスを使用することはできません。 updateAll()関数は結合をサポートしていないため、すべてのフィールドを別名で使用することができます。