leftJoin( 'ambulatorio_servico_tipo as tipo', 'tipo.id', 'servico.tipo_id' ) ->select( 'servico.id', 'servico.nome', DB::raw('tipo.nome as tipo'), ); } public static function create() { return [ 'form' => self::getForm(), 'model' => [ 'nome' => null, 'tipo_id' => null, ] ]; } public static function edit($id) { $servico = Servico::findOrFail($id); return [ 'form' => self::getForm(), 'model' => [ 'nome' => $servico->nome, 'tipo_id' => $servico->tipo_id, ] ]; } private static function getForm() { return [ 'tipos' => ServicoTipo::orderBy('nome')->get(['id', 'nome']), ]; } public static function store() { self::validate(); return Servico::create(request()->all())->fresh(); } public static function update($id) { self::validate(); return (tap(Servico::findOrFail($id))->update(request()->all()))->fresh(); } public static function validate() { $rules = [ 'nome' => [ 'required', 'string', 'between:3,100', Rule::unique(Servico::class, 'nome')->ignore(request()->route('servico')), ], 'tipo_id' => [ 'nullable', 'integer', Rule::exists(ServicoTipo::class, 'id'), ], ]; $messages = [ 'nome.unique' => 'O nome do Serviço já foi inserido anteriormente.', ]; request()->validate($rules, $messages); } public static function destroy($id) { Servico::findOrFail($id)->delete(); } }