44907


CAKEPHP3の参考書に従ってbakeコマンドで一連を作成しました。DBをMySQLとしたテーブルの登録画面は無事に操作することができました。  
当該テーブルのid列がPrimaryキーで自動採取するタイプでしたが、MySQLだった際は無事にキーを自動採取した上でレコードが登録できていた、ということです。

app.phpをMSSQLと接続するための定義に変更して（勿論同じ構造のテーブルを用意した上で）、bakeで一連を仕上げなおしました。レコードの照会・編集・削除・一覧表示のメソッドは無事動作しますが、登録のメソッドだけ正常に行えません。

CakePHP内蔵サーバに現れていたエラー内容を確認すると、id列がemptyという状況のようでした。  
標題のとおりの要因=キーの自動採取に失敗していると推察しています。  
[![画像の説明をここに入力](https://i.stack.imgur.com/OeF6m.png)](https://i.stack.imgur.com/OeF6m.png)

この状況を打開する手立てはあるのでしょうか？仕上げられたエンティティ内の$_accessibleを編集（'id'=>true から 'id'=>false
)にしても状況は変わりありませんでした。

ちなみに、MSSQL上の当該テーブルに別の手続き（ManagementStudio）でレコードを登録すると、自動でidが取得されており、DBMS側の問題ではないと受けてとれます。

参考書の中で紹介されたDBMSとは異なるDBMSを選択して、参考書に従った課題の取り組みは無理がありますかね（より実践を意識したくて
DBMSにMSSQLを選択しています）

[code]

    public function validationDefault(Validator $validator)
        {
            $validator
                ->integer('id')
                ->requirePresence('id', 'create')
                ->notEmpty('id');
    
            $validator
                ->scalar('title')
                ->maxLength('title', 50)
                ->allowEmpty('title');
    
            $validator
                ->scalar('author')
                ->maxLength('author', 50)
                ->allowEmpty('author');
    
            $validator
                ->integer('price')
                ->allowEmpty('price');
    
            return $validator;
        }
    
[/code]


CC BY-SA 4.0
2018-06-20T02:13:44.183
44902
2018-06-20T05:58:11.427
2018-06-20T05:32:22.497
25696
25696
question
cakephp sql-server
MSSQLテーブル用の、bakeから仕上げた登録画面が、キー自動採取を失敗する


idフィールドのバリデーションが以下のように設定されているためバリデーションエラーとなり保存できない状況です。

[code]

        $validator
            ->integer('id') // idは数値
            ->requirePresence('id', 'create') // 新規作成時にidは必須
            ->notEmpty('id'); // idは空であってはならない
    
[/code]

idが採番されるのはDBへの保存時ですので、保存前には空でなければなりません。

idのバリデーションは以下のようになるべきです。

[code]

        $validator
            ->integer('id') // idは数値
            ->allowEmpty('id', 'create');  // 新規作成時にidは空でもよい
    
[/code]


CC BY-SA 4.0
2018-06-20T05:58:11.427
44907
2018-06-20T05:58:11.427
2668
44902
answer