2017-07-18 5 views
0

私はrolesテーブルを持っています。Cakephp 3 create entry、カスタムプライマリフィールドを設定

CREATE TABLE `roles` (
    `role` varchar(20) COLLATE utf8_unicode_ci NOT NULL, 
    `permissions` longtext COLLATE utf8_unicode_ci 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
ALTER TABLE `roles` 
    ADD PRIMARY KEY (`role`), 
    ADD UNIQUE KEY `role` (`role`); 

ケーキはこれを「通常の」フィールドとして認識しないため、入力フィールドは表示されません。

私はこれで私の見解を固定:それは、エントリを保存しますが、データベース行に何かを埋めていないrole

// src/Controller/Admin/RolesController.ctp 

$roleData = $this->request->getData(); 
$roleData['role'] = strtolower($roleData['name']); 
unset($roleData['name']); 

$role = $this->Roles->patchEntity($role, $roleData); 
if ($this->Roles->save($role)) { 
    $this->Flash->success(__('The role has been saved.')); 
} 

// src/Template/Admin/Roles/add.ctp 

echo $this->Form->control('name', ['class' => 'form-control']); 

そして今、私のコントローラでの回避策。何か不足していますか?

+0

Entityフォルダの 'RoleEntity'ファイルをチェックしますか?それはアクセス可能ですか? –

+0

ロールの名前を変更する必要があるときはどうしますか?外来キーの制約があるときは、どうやってそれをやりますか? btw、主キーは定義によって一意である必要があります。 – ndm

答えて

1

patchEntityを使用している場合、割り当て不可能なフィールドを割り当てることはできません。プライマリキーはデフォルトでは割り当て可能なキーではありません。エンティティでそれを変更すると、フォームがパッチエンティティを正しく動作させることができるようになります。 RolesTable.php

namespace App\Model\Entity; 

use Cake\ORM\Entity; 

class Role extends Entity 
{ 
    protected $_accessible = [ 
     'role' => true, 
     'permissions' => true, 
     '*' => false, 
    ]; 
} 

https://book.cakephp.org/3.0/en/orm/saving-data.html#changing-accessible-fields

https://book.cakephp.org/3.0/en/orm/entities.html#mass-assignment

+1

最初に試してみましたが、うまくいきませんでした。その後、モデル、コントローラー、ビューを再読み込みしました。今それは動作します。ありがとうございました :) –

0

このような何かがあるはず:

public function initialize(array $config) 
{ 
    parent::initialize($config); 
    $this->setTable('roles'); 
    $this->setPrimaryKey('role'); 
} 

ので、CakePHPは主キーとして'role'使用します。

関連する問題