

以下のようなテーブル構造があります。

[code]

    CREATE TABLE `products` (
    `uid` int(11) NOT NULL,
    `item_code` varchar(255) NOT NULL,
    `stock` int(11) NOT NULL,
    `modified` datetime NOT NULL,
    `created` datetime NOT NULL,
    UNIQUE KEY `unique_keys` (`uid`,`item_code`)
    )
    
[/code]

uid:5, item_code:b-testのレコードがある状態で

[code]

    $test = array(
        (int) 0 => array(
            'item_code' => 'b-test',
            'uid' => '5'
        ),
        (int) 1 => array(
            'item_code' => 'w-test',
            'uid' => '5'
        )
    );
    
    $this->Product->saveAll($test);
    
[/code]

このテーブルに対して上記のようなコードを実行すると

[code]

    Integrity constraint violation: 1062 Duplicate entry '5-b-test' for    key 'unique_keys'
    
[/code]

と怒られてupdateになりません。  
cakephpでは複合ユニークキーの保存と更新は出来ないのでしょうか。


CC BY-SA 3.0
2016-12-27T02:05:07.233
31446
2017-03-04T09:04:49.093
20030
question
mysql cakephp
【cakephp2.9】複合ユニークキー設定時のsaveAllの挙動


CakePHP 2.x系は複合主キーに未対応です。

ModelクラスのprimaryKeyに依存する部分を書き換えることで、対応できなくもないですが副作用が大きいのでお勧めしません。

テーブルへサロゲートキーを追加してしまうのが一番の解法ですが、できない場合、複合主キーのテーブルへの保存についてはupdateAllなどを用いた保存メソッドを別途作成します。

なお、CakePHP 3.x系では複合主キーに対応しています。


CC BY-SA 3.0
2016-12-27T06:44:53.010
31455
2016-12-27T06:44:53.010
2668
31446
answer