質問編集履歴

5 追記

ssk

ssk score 288

2017/03/09 22:35  投稿

CakePHP3で一括更新・新規追加を行う
[前回の質問](https://teratail.com/questions/68509)でアソシエーションを利用した更新・新規追加を行っています。
何度やっても更新はされず、新規登録になってしまうため、ご教授いただきたいです。
```PHP
//edit.php
echo $this->Form->input('dalcheckbox15s.0.dal15_id',[
```
```PHP
$datacklist = $this->Datacklists->patchEntity($datacklist, $this->request->data,['associated' => ['Dalcheckbox15s']]);
```
```PHP
//debug($datacklist);
'dalcheckbox15s' => [
       (int) 0 => object(Cake\ORM\Entity) {
           'dal15_id' => (int) 1,
           '[new]' => true,
           '[accessible]' => [
               '*' => true
           ],
           '[dirty]' => [
               'dal15_id' => true
           ],
           '[original]' => [],
           '[virtual]' => [],
           '[errors]' => [],
           '[invalid]' => [],
           '[repository]' => 'Dalcheckbox15s'
       
       }
   ],
```
idを渡してあげればいいのでしょうか?
その場合、どのようにidを渡すのかも教えていただけると助かります。。
######少し前進
このように書くとid1が更新されました。
```PHP
foreach($this->request->data['dalcheckbox15s'][0] as $key => $value){
               $this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
           }
```
``'id' => 1,``をテーブルから参照して動的に生成できれば、、、
#####追記
```PHP
//debug($datacklist)
'[original]' => [
       'dalcheckbox15s' => [
           (int) 0 => object(Cake\ORM\Entity) {
               'id' => (int) 1,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 1,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           },
           (int) 1 => object(Cake\ORM\Entity) {
               'id' => (int) 2,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 2,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           }
       ]
   ],
```
'id' => (int) 1,
'id' => (int) 2,
この2つの情報を
``'id' => 1,``のところに入れてあげればいいかと思うのですが
方法はございますか?
```PHP
$this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
```
######追記
アソシエーションした意味がないような気がすうのですが
下記で一旦全て削除してからインサートはできるようになりました。
```PHP
$i = 0;
           foreach($dal15s as $key => $value){
               $this->request->data['dalcheckbox15s'][$i] = [
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
               $i++;
           }
           $datacklist = $this->Datacklists->patchEntity($datacklist,$this->request->data);
```
やりたいことは、「CakePHP3で一括更新・新規追加を行う」なので、分かる方は助言いただけると幸いです。
よろしくお願いいたします。
よろしくお願いいたします。
######追記
アソシエーション定義
```PHP
$this->hasMany('Dalcheckbox15s', [
           'joinTable' => 'dalcheckbox15s',
           'foreignKey' => 'datacklists_id',
           'targetForeignKey' => 'dal15_id',
           'joinType' => 'LEFT',
           'saveStrategy' => 'replace',
       ]);
```
  • CakePHP

    2849 questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

4 追記

ssk

ssk score 288

2017/03/09 19:32  投稿

CakePHP3で一括更新・新規追加を行う
[前回の質問](https://teratail.com/questions/68509)でアソシエーションを利用した更新・新規追加を行っています。
何度やっても更新はされず、新規登録になってしまうため、ご教授いただきたいです。
```PHP
//edit.php
echo $this->Form->input('dalcheckbox15s.0.dal15_id',[
```
```PHP
$datacklist = $this->Datacklists->patchEntity($datacklist, $this->request->data,['associated' => ['Dalcheckbox15s']]);
```
```PHP
//debug($datacklist);
'dalcheckbox15s' => [
       (int) 0 => object(Cake\ORM\Entity) {
           'dal15_id' => (int) 1,
           '[new]' => true,
           '[accessible]' => [
               '*' => true
           ],
           '[dirty]' => [
               'dal15_id' => true
           ],
           '[original]' => [],
           '[virtual]' => [],
           '[errors]' => [],
           '[invalid]' => [],
           '[repository]' => 'Dalcheckbox15s'
       
       }
   ],
```
idを渡してあげればいいのでしょうか?
その場合、どのようにidを渡すのかも教えていただけると助かります。。
######少し前進
このように書くとid1が更新されました。
```PHP
foreach($this->request->data['dalcheckbox15s'][0] as $key => $value){
               $this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
           }
```
``'id' => 1,``をテーブルから参照して動的に生成できれば、、、
#####追記
```PHP
//debug($datacklist)
'[original]' => [
       'dalcheckbox15s' => [
           (int) 0 => object(Cake\ORM\Entity) {
               'id' => (int) 1,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 1,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           },
           (int) 1 => object(Cake\ORM\Entity) {
               'id' => (int) 2,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 2,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           }
       ]
   ],
```
'id' => (int) 1,
'id' => (int) 2,
この2つの情報を
``'id' => 1,``のところに入れてあげればいいかと思うのですが
方法はございますか?
```PHP
$this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
```
```
######追記
アソシエーションした意味がないような気がすうのですが
下記で一旦全て削除してからインサートはできるようになりました。
```PHP
$i = 0;
           foreach($dal15s as $key => $value){
               $this->request->data['dalcheckbox15s'][$i] = [
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
               $i++;
           }
           $datacklist = $this->Datacklists->patchEntity($datacklist,$this->request->data);
```
やりたいことは、「CakePHP3で一括更新・新規追加を行う」なので、分かる方は助言いただけると幸いです。
よろしくお願いいたします。
  • CakePHP

    2849 questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

3 追記

ssk

ssk score 288

2017/03/09 19:08  投稿

CakePHP3で一括更新・新規追加を行う
[前回の質問](https://teratail.com/questions/68509)でアソシエーションを利用した更新・新規追加を行っています。
何度やっても更新はされず、新規登録になってしまうため、ご教授いただきたいです。
```PHP
//edit.php
echo $this->Form->input('dalcheckbox15s.0.dal15_id',[
```
```PHP
$datacklist = $this->Datacklists->patchEntity($datacklist, $this->request->data,['associated' => ['Dalcheckbox15s']]);
```
```PHP
//debug($datacklist);
'dalcheckbox15s' => [
       (int) 0 => object(Cake\ORM\Entity) {
           'dal15_id' => (int) 1,
           '[new]' => true,
           '[accessible]' => [
               '*' => true
           ],
           '[dirty]' => [
               'dal15_id' => true
           ],
           '[original]' => [],
           '[virtual]' => [],
           '[errors]' => [],
           '[invalid]' => [],
           '[repository]' => 'Dalcheckbox15s'
       
       }
   ],
```
idを渡してあげればいいのでしょうか?
その場合、どのようにidを渡すのかも教えていただけると助かります。。
######少し前進
このように書くとid1が更新されました。
```PHP
foreach($this->request->data['dalcheckbox15s'][0] as $key => $value){
               $this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
           }
```
``'id' => 1,``をテーブルから参照して動的に生成できれば、、、
``'id' => 1,``をテーブルから参照して動的に生成できれば、、、
#####追記
```PHP
//debug($datacklist)
'[original]' => [
       'dalcheckbox15s' => [
           (int) 0 => object(Cake\ORM\Entity) {
               'id' => (int) 1,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 1,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           },
           (int) 1 => object(Cake\ORM\Entity) {
               'id' => (int) 2,
               'datacklists_id' => (int) 22488,
               'dal15_id' => (int) 2,
               '[new]' => false,
               '[accessible]' => [
                   '*' => true
               ],
               '[dirty]' => [],
               '[original]' => [],
               '[virtual]' => [],
               '[errors]' => [],
               '[invalid]' => [],
               '[repository]' => 'Dalcheckbox15s'
           
           }
       ]
   ],
```
'id' => (int) 1,
'id' => (int) 2,
この2つの情報を
``'id' => 1,``のところに入れてあげればいいかと思うのですが
方法はございますか?
```PHP
$this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
```
  • CakePHP

    2849 questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

2 追記

ssk

ssk score 288

2017/03/09 18:58  投稿

CakePHP3で一括更新・新規追加を行う
[前回の質問](https://teratail.com/questions/68509)でアソシエーションを利用した更新・新規追加を行っています。
何度やっても更新はされず、新規登録になってしまうため、ご教授いただきたいです。
```PHP
//edit.php
echo $this->Form->input('dalcheckbox15s.0.dal15_id',[
```
```PHP
$datacklist = $this->Datacklists->patchEntity($datacklist, $this->request->data,['associated' => ['Dalcheckbox15s']]);
```
```PHP
//debug($datacklist);
'dalcheckbox15s' => [
       (int) 0 => object(Cake\ORM\Entity) {
           'dal15_id' => (int) 1,
           '[new]' => true,
           '[accessible]' => [
               '*' => true
           ],
           '[dirty]' => [
               'dal15_id' => true
           ],
           '[original]' => [],
           '[virtual]' => [],
           '[errors]' => [],
           '[invalid]' => [],
           '[repository]' => 'Dalcheckbox15s'
       
       }
   ],
```
idを渡してあげればいいのでしょうか?
その場合、どのようにidを渡すのかも教えていただけると助かります。。
######少し前進
このように書くとid1が更新されました。
```PHP
foreach($this->request->data['dalcheckbox15s'][0] as $key => $value){
               $this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
           }
```
```
``'id' => 1,``をテーブルから参照して動的に生成できれば、、、
  • CakePHP

    2849 questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

1 追記

ssk

ssk score 288

2017/03/09 18:56  投稿

CakePHP3で一括更新・新規追加を行う
[前回の質問](https://teratail.com/questions/68509)でアソシエーションを利用した更新・新規追加を行っています。
何度やっても更新はされず、新規登録になってしまうため、ご教授いただきたいです。
```PHP
//edit.php
echo $this->Form->input('dalcheckbox15s.0.dal15_id',[
```
```PHP
$datacklist = $this->Datacklists->patchEntity($datacklist, $this->request->data,['associated' => ['Dalcheckbox15s']]);
```
```PHP
//debug($datacklist);
'dalcheckbox15s' => [
       (int) 0 => object(Cake\ORM\Entity) {
           'dal15_id' => (int) 1,
           '[new]' => true,
           '[accessible]' => [
               '*' => true
           ],
           '[dirty]' => [
               'dal15_id' => true
           ],
           '[original]' => [],
           '[virtual]' => [],
           '[errors]' => [],
           '[invalid]' => [],
           '[repository]' => 'Dalcheckbox15s'
       
       }
   ],
```
idを渡してあげればいいのでしょうか?
その場合、どのようにidを渡すのかも教えていただけると助かります。。
その場合、どのようにidを渡すのかも教えていただけると助かります。。
######少し前進
このように書くとid1が更新されました。
```PHP
foreach($this->request->data['dalcheckbox15s'][0] as $key => $value){
               $this->request->data['dalcheckbox15s'][0] = [
                                   'id' => 1,
                                   'datacklists_id' => $id,
                                   'dal15_id' => $value,
                               ];
           }
```       
  • CakePHP

    2849 questions

    CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る