アイテムと同時に複数の画像を登録できるようにsaveManyをつかっているのですが、
結果はfalseではないのにDBに保存されません。
画像は専用のDBに挿入しようとしています。
model <?php namespace App\Model\Table;use Cake\ORM\TableRegistry;use App\Model\Table\AppTable; use Cake\ORM\Table;use Cake\ORM\Entity; use App\Model\Behavior\Validation; class ImagesTable extends AppTable { public function initialize(array $config ) { $this->belongsTo('Items'); } public function saveImagesData( $data, $item_id) { $res = $data['image_path']; if ( $res !== null ) $images = []; foreach( $res as $key => $val) { $val['item_id'] = $item_id; $val['image_path'] = $val['file_path']; unset($val['file_path']); $images[] = $val; } $getImages = TableRegistry::getTableLocator()->get('Images'); $images = $getImages->newEntity($images); return $getImage->saveMany( $images ); }
controller public function complete() { if ( $this->request->is( [ 'put', 'post' ] ) ) { if ( isset( $this->request->data['complete'] ) ) { $data = $this->_session->read( 'item_edit' ); $item_id = $this->Items->saveData( $data ); $this->Images->saveImagesData( $data, $item_id ); // 登録したセッションを削除する $this->_session->delete( 'item_edit' ); return $this->redirect( '/items/complete' ); } else if ( isset( $this->request->data['back'] ) ) { return $this->redirect( '/items/application' ) ; } } }
component public function saveFile( &$data, $key, $file_path='file_path' ) { if ( count( $data ) !== 0 ) { // cakeのrequestデータ if ( isset( $data[$key]['tmp_name'] ) ) { $data[$key][$file_path] = self::save( $data, $key ); } else { foreach( $data[$key] as $k => $v ) { $data[$key][$k][$file_path] = self::save( $v, $key, $data, $k ); } } } } // ファイルの移動 public function save( $val, $key, $data=null, $k=null ) { $image = ( isset( $val[$key]['tmp_name'] ) ) ? $val[$key] : $val; // 配列じゃない場合は、スルー if ( is_array( $image ) === false ) return $val; if ( $image['error'] === 0 && $image['size'] !== 0 ) { if ( is_uploaded_file( $image['tmp_name'] ) === true ) { $mime_type = mime_content_type( $image['tmp_name'] ); //$dir = 'img' . DS . 'upload' . DS; switch( $mime_type ) { case 'image/gif': $dir = 'img'; $ext = '.gif'; break; case 'image/jpeg': $dir = 'img'; $ext = '.jpg'; break; case 'image/png': $dir = 'img'; $ext = '.png'; break; case 'application/pdf': $dir = 'pdf'; $ext = '.pdf'; break; default: $dir = 'img'; } if( $key !== null ) $dir .= DS . $key; $file_name = time() . '_' . uniqid( rand() ) . $ext; $dir .= $this->getTargetDir( $file_name ); if ( is_dir( WWW_ROOT . 'upload' . DS . $dir ) === false ) mkdir( WWW_ROOT . 'upload' . DS . $dir, 0777, true ); move_uploaded_file( $image['tmp_name'], WWW_ROOT . DS . 'upload' . DS . $dir . DS . $file_name ); $file_name = 'upload' . DS . $dir . DS . $file_name; return $file_name; } } else if ( $image['size'] === 0 && $k !== null && isset( $data['hidden_' . $key][$k] ) ) { return $data['hidden_' . $key][$k]; } else if ( $image['size'] === 0 && isset( $val['hidden_' . $key] ) ) { return $val['hidden_' . $key]; } }
どなたか原因わかるかたいらっしゃいますでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/29 13:14