【问题标题】:photo upload code does not work and for the code that already worked before照片上传代码不起作用,对于之前已经起作用的代码
【发布时间】:2021-03-15 18:01:09
【问题描述】:

我需要上传一张照片,文件信息来自一个数组中的视图,其中包含更多其他变量的值,但上传代码不起作用。没有这个代码,其余的工作完美,当我添加上传代码时没有任何效果。 请帮忙

public function CreateProduction(Request $request)
    {
        $data = $request->all();
        
        
        $production = new production;
        $production->status = 1;
        $production->done = 0;
        $production->save();
        $production_id = DB::getPdo()->lastInsertId();
        

        $proposal = proposal::where('id_proposal', $data['id_proposal'])->first();
        $proposal->id_production = $production_id;
        $proposal->save();
        $proposedphases = $proposal->proposed_phases()->get();
        

        foreach($proposedphases as $proposedphase)
            {
                $this->validate($request, [
                    'select_file'  => 'required|image|mimes:jpg,jpeg,png,gif|max:200000'
                   ]); 
              
                   $image = $request->file('select_file');
              
                   $new = rand() . '.' . $image->getClientOriginalExtension();
                   
              
                   $image->move(public_path('images'), $image);

                $productionphase = new production_phases;
                
                   $productionphase->photo = $new;
                $color_cap_out = color::where('id_color', $data[$proposedphase->id_proposedphase.'cap_out'])->first();
                    {
                        $productionphase->cap_out_id = $color_cap_out['id_color'];
                        $productionphase->cap_out_name = $color_cap_out['name'];
                        $productionphase->cap_out_code = $color_cap_out['code'];
                    }
                $color_cap_in = color::where('id_color', $data[$proposedphase->id_proposedphase.'cap_in'])->first();
                    {
                        $productionphase->cap_in_id = $color_cap_in['id_color'];
                        $productionphase->cap_in_name = $color_cap_in['name'];
                        $productionphase->cap_in_code = $color_cap_in['code'];
                    }
                $color_cord = color::where('id_color', $data[$proposedphase->id_proposedphase.'cord'])->first();
                    {
                        $productionphase->cord_id = $color_cord['id_color'];
                        $productionphase->cord_name = $color_cord['name'];
                        $productionphase->cord_code = $color_cord['code'];
                    }
                $color_ribe_corp = color::where('id_color', $data[$proposedphase->id_proposedphase.'ribe_corp'])->first();
                    {
                        $productionphase->ribe_corp_id = $color_ribe_corp['id_color'];
                        $productionphase->ribe_corp_name= $color_ribe_corp['name'];
                        $productionphase->ribe_corp_code = $color_ribe_corp['code'];
                    }
                $color_ribe_arm = color::where('id_color', $data[$proposedphase->id_proposedphase.'ribe_arm'])->first();
                    {
                        $productionphase->ribe_arm_id = $color_ribe_arm['id_color'];
                        $productionphase->ribe_arm_name = $color_ribe_arm['name'];
                        $productionphase->ribe_arm_code = $color_ribe_arm['code'];
                    }
                $color_bibo = color::where('id_color', $data[$proposedphase->id_proposedphase.'bibo'])->first();
                    {
                        $productionphase->bibo_id = $color_bibo['id_color'];
                        $productionphase->bibo_name = $color_bibo['name'];
                        $productionphase->bibo_code = $color_bibo['code'];
                    }
                $color_zip = color::where('id_color', $data[$proposedphase->id_proposedphase.'zip'])->first();
                    {
                        $productionphase->zip_id = $color_zip['id_color'];
                        $productionphase->zip_name = $color_zip['name'];
                        $productionphase->zip_code = $color_zip['code'];
                    }
                $color_mola = color::where('id_color', $data[$proposedphase->id_proposedphase.'mola'])->first();
                    {
                        $productionphase->mola_id = $color_mola['id_color'];
                        $productionphase->mola_name = $color_mola['name'];
                        $productionphase->mola_code = $color_mola['code'];
                    }
                
                if($data[$proposedphase->id_proposedphase.'arm'] == 0)
                    {
                        $productionphase->arm_name = 'normal';
                    }
                if($data[$proposedphase->id_proposedphase.'arm'] == 1)
                    {
                        $productionphase->arm_name = 'reglan';
                    }
                $productionphase->material = $data[$proposedphase->id_proposedphase.'material'];
                $productionphase->id_production = $production_id;
                $productionphase->id_proposedphase = $proposedphase['id_proposedphase'];
                
                   
                $productionphase->save();
                $productionphase_id = DB::getPdo()->lastInsertId();
                 
                if ( $data[$proposedphase->id_proposedphase.'corp_color_1'] !=0)

                    {
                        $color_1 = color::where('id_color', $data[$proposedphase->id_proposedphase.'corp_color_1'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 0;
                        $production_phase_colors->id_color = $color_1['id_color'];
                        $production_phase_colors->name = $color_1['name'];
                        $production_phase_colors->code = $color_1['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }
                
                if ( $data[$proposedphase->id_proposedphase.'corp_color_2'] !=0)

                    {
                        $color_2 = color::where('id_color', $data[$proposedphase->id_proposedphase.'corp_color_2'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 0;
                        $production_phase_colors->id_color = $color_2['id_color'];
                        $production_phase_colors->name = $color_2['name'];
                        $production_phase_colors->code = $color_2['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }

                if ( $data[$proposedphase->id_proposedphase.'corp_color_3'] !=0)

                    {
                        $color_3 = color::where('id_color', $data[$proposedphase->id_proposedphase.'corp_color_3'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 0;
                        $production_phase_colors->id_color = $color_3['id_color'];
                        $production_phase_colors->name = $color_3['name'];
                        $production_phase_colors->code = $color_3['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }

                if ( $data[$proposedphase->id_proposedphase.'arm_color_1'] !=0)

                    {
                        $color_1 = color::where('id_color', $data[$proposedphase->id_proposedphase.'arm_color_1'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 1;
                        $production_phase_colors->id_color = $color_1['id_color'];
                        $production_phase_colors->name = $color_1['name'];
                        $production_phase_colors->code = $color_1['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }
                
                if ( $data[$proposedphase->id_proposedphase.'arm_color_2'] !=0)

                    {
                        $color_2 = color::where('id_color', $data[$proposedphase->id_proposedphase.'arm_color_2'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 1;
                        $production_phase_colors->id_color = $color_2['id_color'];
                        $production_phase_colors->name = $color_2['name'];
                        $production_phase_colors->code = $color_2['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }
                    
                if ( $data[$proposedphase->id_proposedphase.'arm_color_3'] !=0)

                    {
                        $color_3 = color::where('id_color', $data[$proposedphase->id_proposedphase.'arm_color_3'])->first();
                        $production_phase_colors = new production_phase_colors;
                        $production_phase_colors->part = 1;
                        $production_phase_colors->id_color = $color_3['id_color'];
                        $production_phase_colors->name = $color_3['name'];
                        $production_phase_colors->code = $color_3['code'];
                        $production_phase_colors->id_productionphase = $productionphase_id; 
                        $production_phase_colors->save();
                    }

                $proposedphasesizes = $proposedphase->proposedphasesizes()->get();

                foreach($proposedphasesizes as $proposedphasesize)
                    {
                        $productionphasesize = new production_phase_size;
                        $productionphasesize->id_size = $proposedphasesize['id_size'];
                        $productionphasesize->name = $proposedphasesize['name'];
                        $productionphasesize->quantity = $proposedphasesize['quantity'];
                        $productionphasesize->done = 0;
                        $productionphasesize->id_productionphase = $productionphase_id;
                        $productionphasesize->save();
                        
                    }

                
            }
            $production = production::where('id_production', $production_id)->first();

                    $logs = new logs;
                    $logs->id_user = Auth::user()->id_user;
                    $logs->name = Auth::user()->name;
                    $logs->description = "criada nova produção";
                    $logs->save();

            return view('admin.production.list_productions', compact('production'));  
    }

这里是根据要求进行分析的完整控制器,我继续说,如果没有打开 foreach 后的上传代码,其余部分可以正常工作,但是有了这块它就停止工作了

【问题讨论】:

  • 请发布完整的控制器方法代码以获取上下文。截断的代码无助于完全理解上下文
  • @Donkarnash 使用完整代码编辑了帖子

标签: php laravel model-view-controller controller laravel-blade


【解决方案1】:

试试这段代码上传文件。

$image = $request->file('select_file');
$new = rand() . '.' . $image->getClientOriginalName();
$image->move(public_path('images'), $new);

【讨论】:

    【解决方案2】:

    我认为问题在于您尝试保存上传文件的方式 - move() 方法的参数

    试试下面的

    
    
        public function CreateProduction(Request $request)
        {
            $data = $request->all();
    
            $production = production::create(['status' => 1, 'done' => 0]);
    
            $proposal = proposal::where('id_proposal', $data['id_proposal'])->first();
    
            $proposal->id_production = $production->id_production;
            $proposal->save();
            $proposedphases = $proposal->proposed_phases;
    
            foreach ($proposedphases as $proposedphase) {           
                $proposedphaseId = $proposedphase->id_proposedphase;
    
                $productionphaseData = array_merge(
                    ['photo' => $this->checkPresenceAndSaveImage('select_file', $request)],
                    $this->getCapOutData($data[$proposedphaseId . 'cap_out']),
                    $this->getCapInData($data[$proposedphaseId . 'cap_in']),
                    $this->getCordData($data[$proposedphaseId . 'cord']),
                    $this->getRibeCorpData($data[$proposedphaseId . 'ribe_corp']),
                    $this->getRibeArmData($data[$proposedphaseId . 'ribe_arm']),
                    $this->getColorBiboData($data[$proposedphaseId . 'bibo']),
                    $this->getColorZipData($data[$proposedphaseId . 'zip']),
                    $this->getColorMolaData($data[$proposedphaseId . 'mola'])
                );
    
                if ($data[$proposedphaseId . 'arm'] == 0) {
                    $productionphaseData['arm_name'] = 'normal';
                }
                if ($data[$proposedphaseId . 'arm'] == 1) {
                    $productionphaseData['arm_name'] = 'reglan';
                }
                $productionphaseData['material']         = $data[$proposedphaseId . 'material'];
                $productionphaseData['id_production']    = $production->id_production;
                $productionphaseData['id_proposedphase'] = $proposedphase['id_proposedphase'];
    
                $productionphase = production_phases::create($productionphaseData);
    
                $this->checkAndCreateCorpColors($proposedphaseId, $productionphase->id, $data);
    
                $this->checkAndCreateArmColors($proposedphaseId, $productionphase->id, $data);
    
                $this->createProductionPhaseSizes($proposedphase, $productionphase->id);
            }
            
    
            $logs              = new logs;
            $logs->id_user     = Auth::user()->id_user;
            $logs->name        = Auth::user()->name;
            $logs->description = 'criada nova produção';
            $logs->save();
    
            return view('admin.production.list_productions', compact('production'));
        }
    
        protected function checkPresenceAndSaveImage(string $attribute, Request $request)
        {
            if ($request->hasFile($attribute) && $request->file($attribute)->isValid()) {
                $this->validate($request, [
                    $attribute  => 'required|image|mimes:jpg,jpeg,png,gif|max:200000'
                ]);
    
                $image = $request->file($attribute);
    
                $path = rand() . '.' . $image->getClientOriginalExtension();
    
                $image->move(public_path('images'), $path);
    
                return $path;
            }
        }
    
        protected function getCapOutData($idColor)
        {
            $color_cap_out = color::where('id_color', $idColor)->first();
    
            return [
                'cap_out_id'   => $color_cap_out['id_color'],
                'cap_out_name' => $color_cap_out['name'],
                'cap_out_code' => $color_cap_out['code'],
            ];
        }
    
        protected function getCapInData($idColor)
        {
            $color_cap_out = color::where('id_color', $idColor)->first();
    
            return [
                'cap_out_id'   => $color_cap_out['id_color'],
                'cap_out_name' => $color_cap_out['name'],
                'cap_out_code' => $color_cap_out['code'],
            ];
        }
    
        protected function getCordData($idColor)
        {
            $color_cord = color::where('id_color', $idColor)->first();
    
            return [
                'cord_id'   => $color_cord['id_color'],
                'cord_name' => $color_cord['name'],
                'cord_code' => $color_cord['code'],
            ];
        }
    
        protected function getRibeCorpData($idColor)
        {
            $color_ribe_corp = color::where('id_color', $idColor)->first();
    
            return [
                'ribe_corp_id'   => $color_ribe_corp['id_color'],
                'ribe_corp_name' => $color_ribe_corp['name'],
                'ribe_corp_code' => $color_ribe_corp['code'],
            ];
        }
    
        protected function getRibeArmData($idColor)
        {
            $color_ribe_arm = color::where('id_color', $idColor)->first();
    
            return [
                'ribe_arm_id'   => $color_ribe_arm['id_color'],
                'ribe_arm_name' => $color_ribe_arm['name'],
                'ribe_arm_code' => $color_ribe_arm['code'],
            ];
        }
    
        protected function getColorBiboData($idColor)
        {
            $color_bibo = color::where('id_color', $idColor)->first();
    
            return [
                'bibo_id'   => $color_bibo['id_color'],
                'bibo_name' => $color_bibo['name'],
                'bibo_code' => $color_bibo['code'],
            ];
        }
    
        protected function getColorZipData($idColor)
        {
            $color_zip = color::where('id_color', $idColor)->first();
    
            return [
                'zip_id'   => $color_zip['id_color'],
                'zip_name' => $color_zip['name'],
                'zip_code' => $color_zip['code'],
            ];
        }
    
        protected function getColorMolaData($idColor)
        {
            $color_mola = color::where('id_color', $idColor)->first();
    
            return [
                'mola_id'   => $color_mola['id_color'],
                'mola_name' => $color_mola['name'],
                'mola_code' => $color_mola['code'],
            ];
        }
    
        protected function checkAndCreateCorpColors($proposedphaseId, $productionphaseId, array $data)
        {
            $colors = collect(['corp_color_1', 'corp_color_2', 'corp_color_3']);
            $keys   = $colors->map(fn ($suffix) => $proposedphaseId . $suffix)->values();
    
            $keys->each(function ($key) use ($productionphaseId, $data) {
                if ($data[$key] != 0) {
                    $color = color::where('id_color', $data[$key])->first();
    
                    production_phase_colors::create([
                        'part'               => 0,
                        'id_color'           => $color['id_color'],
                        'name'               => $color['name'],
                        'code'               => $color['code'],
                        'id_productionphase' => $productionphaseId,
                    ]);
                }
            });
        }
    
        protected function checkAndCreateArmColors($proposedphaseId, $productionphaseId, array $data)
        {
            $colors = collect(['arm_color_1', 'arm_color_2', 'arm_color_3']);
            $keys   = $colors->map(fn ($suffix) => $proposedphaseId . $suffix)->values();
    
            $keys->each(function ($key) use ($productionphaseId, $data) {
                if ($data[$key] != 0) {
                    $color = color::where('id_color', $data[$key])->first();
    
                    production_phase_colors::create([
                        'part'               => 1,
                        'id_color'           => $color['id_color'],
                        'name'               => $color['name'],
                        'code'               => $color['code'],
                        'id_productionphase' => $productionphaseId,
                    ]);
                }
            });
        }
    
        protected function createProductionPhaseSizes($proposedphase, $productionphaseId)
        {
            $proposedphasesizes = $proposedphase->proposedphasesizes()->get();
    
            foreach ($proposedphasesizes as $proposedphasesize) {
                production_phase_size::create([
                        'id_size'            => $proposedphasesize['id_size'],
                        'name'               => $proposedphasesize['name'],
                        'quantity'           => $proposedphasesize['quantity'],
                        'done'               => 0,
                        'id_productionphase' => $productionphaseId,
                    ]);
            }
        }
    

    【讨论】:

    • Donkarnash 插入到字符串 $attribute 中的这个值是从哪里来的?受保护的函数 checkPresenceAndSaveImage(string $attribute, Request $request)
    • 这是包含文件的请求属性,如select_file 在这种情况下
    • "SQLSTATE[23000]: 完整性约束违规: 1048 列 'id_productionphase' 不能为空 (SQL: 插入production_phase_colors (part, id_color, name, code , id_productionphase, updated_at, created_at) 值 (0, 1, Preto, #000000, ?, 2020-12-05 16:27:05, 2020-12-05 16:27:05))"我不明白这个错误是从哪里来的,你能验证一下吗?
    • 您可能必须使用dd($productionphaseId) 调试checkAndCreateCorpColorscheckAndCreateArmColors 以检查您是否收到空值。您还必须检查 production_phase_colors 模型的 $fillable 数组是否包含 id_productionphase
    • 除了上传部分,几乎一切正常,文件既没有进入文件夹,名字也没有保存在数据库中
    猜你喜欢
    • 2013-10-24
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多