model->with("productItems")->paginate(10); $projects = (new Project())->get(); return view($this->bladePath . ".index", compact("data", "projects")); } public function create(FormBuilder $formBuilder) { $project = (new Project())->with("paramedicLevels")->find(request()->project_id); $productParamedicLevels = []; foreach ($project->paramedicLevels as $paramedicLevel) { $productParamedicLevels[] = new ProductParamedicLevel([ "paramedic_level_id" => $paramedicLevel->id, "paramedic_level_name" => $paramedicLevel->name ]); } $vo = new Product([ "project_id" => $project->id, "productParamedicLevels" => $productParamedicLevels ]); $form = $formBuilder->create($this->formClass, [ "method" => "POST", "id" => "fm", "url" => url($this->urlPrefix . "/store"), "model" => $vo ]); return view($this->bladePath . ".create", compact("form", "project", "vo")); } public function stored($model) { event(new ProductSaved($model)); } public function edit($id = null, Request $request, FormBuilder $formBuilder) { $vo = (new Product())->with(["productItems", "productParamedicLevels" => function ($query) { $query->has("paramedicLevel"); }])->find($id ?: $request->id); $project = (new Project())->with("paramedicLevels")->find($vo->project_id); foreach ($vo->productParamedicLevels as $level) { $level->paramedic_level_name = $level->paramedicLevel->name; } foreach ($project->paramedicLevels as $paramedicLevel) { if (in_array($paramedicLevel->id, $vo->productParamedicLevels->pluck("paramedic_level_id")->toArray())) continue; $vo->productParamedicLevels->push(new ProductParamedicLevel([ "paramedic_level_id" => $paramedicLevel->id, "paramedic_level_name" => $paramedicLevel->name ])); } $form = $formBuilder->create($this->formClass, [ "method" => "POST", "id" => "fm", "url" => url($this->urlPrefix . "/update/" . $vo->id), "class" => "form form-horizontal validate-form", "model" => $vo ]); $form->add("_previous", "hidden", ["value" => (url()->previous())]); $form->modify("statistic_factor_id", 'select', ["label" => "统计价格因素", "choices" => (new Factor())->where('product_id', $request->id)->get()->pluck("name", "id")->toArray()] ); return view($this->bladePath . ".create", compact("form", "project", "vo")); } public function updated($model) { event(new ProductSaved($model)); } public function getParamedicLevels(Request $request) { $res = (new ParamedicLevel())->where("project_id", $request->project_id)->get(); return $this->ajaxResponse($res); } }