我想在数据库中保存多个记录,因此在前端,我提供了一个multiselect下拉列表,该列表返回了用户列表。 然后我通过每个userid并存储它的相关形式。 但这给了我一个错误。 不知道为什么。 下面是我的控制器代码。
public function add($formid=null)
{
$this->loadModel("Forms");
$this->loadModel("UserRoles");
$company_id = $this->request->session()->read('Auth.User.company_id');
$roles = $this->UserRoles->find()->where(['user_id'=>$this->request->session()->read('Auth.User.id')])->contain(['Roles'])->first();
if($this->Forms->find()->where(['id'=>$formid,'company_id'=>$company_id])->count() > 0 || $roles->role->name == 'Superadmin')
{
$formAssign = $this->FormAssign->newEntity();
if ($this->request->is('post')) {
// assigning form to all selected Users
$data = $this->request->getData();
$data['form_id'] = (int)$this->request->getData('form_id');
foreach ($this->request->getData('user_id') as $key => $value) {
$formAssign = $this->FormAssign->newEntity();
$data['user_id'] = (int)$value;
if($this->FormAssign->find()->where(['form_id'=>$formid,'user_id'=>$value])->count() == 0)
{
$formAssign = $this->FormAssign->patchEntity($formAssign, $data);
/*debug($formAssign);
exit;*/
if ($this->FormAssign->save($formAssign)) {
}
}
}
//end
$this->Flash->success(__('Form is Assigned to Selected Users'));
// return $this->redirect(['controller'=>'forms','action' => 'index']);
}
$forms = $this->FormAssign->Forms->find('list', ['limit' => 200])->where(['id'=>$formid]);
$users = $this->FormAssign->Users->find('list', ['limit' => 200,'keyField'=>'id','valueField'=>'full_name'])->where(['Users.status'=>true]);
$this->set(compact('formAssign', 'forms', 'users'));
}
else{
return $this->redirect(['controller'=>'forms','action' => 'index']);
}
}
型号代码:
public function initialize(array $config)
{
parent::initialize($config);
$this->setTable('form_assign');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->belongsTo('Forms', [
'foreignKey' => 'form_id',
'joinType' => 'INNER'
]);
$this->belongsTo('Users', [
'foreignKey' => 'user_id',
'joinType' => 'INNER'
]);
}
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmptyString('id', 'create');
$validator
->dateTime('assigned_at')
->allowEmptyDateTime('assigned_at', false);
$validator
->integer('updated_at')
->allowEmptyString('updated_at');
return $validator;
}
public function buildRules(RulesChecker $rules)
{
$rules->add($rules->existsIn(['form_id'], 'Forms'));
$rules->add($rules->existsIn(['user_id'], 'Users'));
return $rules;
}
我的实体: FormAssign类扩展Entity {
protected $_accessible = [
'form_id' => true,
'user_id' => true,
'assigned_at' => true,
'updated_at' => true,
'form' => true,
'user' => true
];
}
我打补丁的实体的输出:
object(App\Model\Entity\FormAssign) {
'form_id' => (int) 9,
'user_id' => (int) 30,
'[new]' => true,
'[accessible]' => [
'form_id' => true,
'user_id' => true,
'assigned_at' => true,
'updated_at' => true,
'form' => true,
'user' => true
],
'[dirty]' => [
'form_id' => true,
'user_id' => true
],
'[original]' => [],
'[virtual]' => [],
'[hasErrors]' => false,
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'FormAssign'
}