$program, "appends" => $program->appends, ]); } public function add(Request $request, Programs $program) { $append = new ProgramAppends(); if (sizeof($program->appends) === 0) { $append->is_original = 1; } return view("program.construct.append.create", [ "program" => $program, "append" => $append ]); } public function edit(Request $request, ProgramAppends $append) { return view("program.construct.append.create", [ "program" => $append->program, "append" => $append ]); } public function copy_view(Request $request, Programs $program) { $programsId = Programs::query()->select("id") ->where("created_at", "<", $program->created_at->addWeeks(2)) ->where("created_at", ">", $program->created_at->addWeeks(-2)) ->pluck("id"); $broadcastList = ProgramAppends::query()->groupBy("name", "from") ->whereIn("program_id", $programsId) ->where("broadcast", "=", 1) ->select("name", "from")->selectRaw("max(id) as id") ->orderBy("id")->get(); return view("program.construct.append.copy_broadcast", [ "program" => $program, "broadcastList" => $broadcastList, ]); } // endregion // region Form Submits public function create(Request $request, Programs $program) { $append = $this->fill_model($request); $program->appends()->save($append); return redirect(route("program.construct.append.list", [ "program"=>$program->id, ])); } public function submit(Request $request, ProgramAppends $append) { $append = $this->fill_model($request, $append); $append->save(); return redirect(route("program.construct.append.list", [ "program"=>$append->program->id, ])); } public function copy_append(Request $request, Programs $program) { $payload = $request->validate([ "ids" => ["required", "array", "exists:App\Models\ProgramAppends,id"] ]); $original_appends = ProgramAppends::query()->findMany($payload["ids"]); $appends = $original_appends->map(function ($append) { return $append->replicate(); }); $program->appends()->saveMany($appends); return redirect(route("program.construct.append.list", [ "program"=>$program->id, ])); } // endregion // region API public function from_list(Request $request) { $query = ProgramAppends::query()->groupBy("from") ->select("from") ->selectRaw("count(1) as total_count") ->orderByDesc("total_count"); return $query->get()->map(function ($item) { return [ "text" => $item["from"], "value" => $item["from"], "alias" => implode("", \pinyin($item["from"], PINYIN_NO_TONE|PINYIN_KEEP_ENGLISH)), "abbr" => \pinyin_abbr($item["from"]), ]; })->toArray(); } // endregion private function fill_model(Request $request, ?ProgramAppends $append = null): ProgramAppends { if ($append === null) { $append = new ProgramAppends(); } $payload = $request->validate([ "name" => ["required_without:is_original"], "from" => ["required"], "price" => ["required", "numeric"], "append" => [], ]); $append->fill($payload); $append->is_original = $request->post("is_original", 0); return $append; } }