質問編集履歴
1
MaterialsController.php add()のソースコードと追加検証結果を追記しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -48,6 +48,57 @@
|
|
48
48
|
'joinType' => 'LEFT'
|
49
49
|
]);
|
50
50
|
```
|
51
|
+
|
52
|
+
質問の投稿以降に行った検証で気づいた点があります。
|
53
|
+
追加画面で貸出なし(empty)を選択しても、
|
54
|
+
MaterialsController.phpのadd()で
|
55
|
+
$material('user_id') =0;
|
56
|
+
と強制的に値を代入すれば、追加は成功するということです。
|
57
|
+
|
58
|
+
ソースコードは下記のとおりです。
|
59
|
+
```PHP
|
60
|
+
public function add()
|
61
|
+
{
|
62
|
+
$material = $this->Materials->newEntity();
|
63
|
+
if ($this->request->is('post')) {
|
64
|
+
$material = $this->Materials->patchEntity($material, $this->request->getData());
|
65
|
+
$material['status'] = '';
|
66
|
+
$material['creator'] = $this->Auth->user('id');
|
67
|
+
$material['user_id'] = 0; //この行が追加した部分です。
|
68
|
+
if ($this->Materials->save($material)) {
|
69
|
+
$this->Flash->success(__('資料情報は保存されました。'));
|
70
|
+
|
71
|
+
return $this->redirect(['action' => 'index']);
|
72
|
+
}
|
73
|
+
$this->Flash->error(__('資料情報は保存されませんでした。もう一度お試しください。'));
|
74
|
+
}
|
75
|
+
$users = $this->Materials->Users->find('list', ['limit' => 200]);
|
76
|
+
$this->set(compact('material', 'users'));
|
77
|
+
}
|
78
|
+
```
|
79
|
+
|
80
|
+
この結果から推測してみました。
|
81
|
+
貸出先でEmpty以外のユーザーが選ばれている場合、
|
82
|
+
$this->request->getData() にはuser_idが含まれた状態になります。
|
83
|
+
その値はpatchEntityによって、$material['user_id']に一括代入されるので、
|
84
|
+
無理に代入しなくても、正常にレコードの追加が実行されます。
|
85
|
+
|
86
|
+
しかし、貸出先でEmpty(貸出なし)を選択した場合、
|
87
|
+
$this->request->getData()にuser_idの項目が存在しなくなるのではないかと思います。
|
88
|
+
その場合、patchEntityも$material['user_id']に代入は行わず、
|
89
|
+
レコードの追加実行時に
|
90
|
+
「Field 'user_id' doesn't have a default value 」というエラーを出力するに至るのではないかと思うのです。
|
91
|
+
|
92
|
+
それで、前出のコードのようにpatchEntityの実施後、
|
93
|
+
$material['user_id'] = 0;
|
94
|
+
のように強制的に値を代入してやれば、レコードの追加実行時にもエラーにならずに済むということになります。
|
95
|
+
|
96
|
+
ということは$this->request->getData()に
|
97
|
+
user_id の値が含まれているかいないかを判定して、
|
98
|
+
含まれていない時のみ、貸出されていないことを示す 0 を強制的に代入すればいいはずです。
|
99
|
+
|
100
|
+
でも、その判定式の書き方が分かりません。
|
101
|
+
|
51
102
|
### 補足情報(FW/ツールのバージョンなど)
|
52
103
|
PHP 7.2.4
|
53
104
|
CakePHP 3.8.2
|