Error: Method Illuminate Database Eloquent Collection::save does not exist

Asked

Viewed 1,789 times

2

Good afternoon guys. I’m developing an application that uses the Framework. I have the error below when trying to save Checklist items. The error occurs in the second save() of the registration method().

Model: Checklistitem

 <?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use DB;
use SoftDeletes;

class ChecklistItem extends Model
{
    protected $table = "checklist_itens";

    protected $primaryKey = 'id';

    public $incrementing = false;

    public $timestamps = false;

    public function checklistItem()
    {
      return $this->belongsTo('App\Models\ChecklistItem', 'id');

    }


    //Este método salva os dados do Checklist do Item
      public function salvar(ChecklistItem $checklistItem) : Array
      {
           $checklistItem = $this->save();

           if($checklistItem){

              return[
                  'success' => true,
                  'message' => 'Sucesso ao cadastrar'
              ];   
          }
          else{

              return[
                  'success' => false,
                  'message' => 'Falha ao cadastrar'
              ]; 
          }
      }


      //Este método remove os dados do Checklist do Item
    public function deletar(ChecklistItem $checklistItem) : Array
    {
        $checklistItem = $this->delete();
        if($checklistItem){

            return[
                'success' => true,
                'message' => 'Sucesso ao excluir'
            ];   
        }
        else{

            return[
                'success' => false,
                'message' => 'Falha ao excluir'
            ]; 
        }
    }


  //Este método atualiza os dados do  Checklist do Item
  public function alterar(ChecklistItem $checklistItem) : Array
  {
    $checklistItem = $this->save();
      if($checklistItem){
          return[
              'success' => true,
              'message' => 'Sucesso ao atualizar'
          ];   
      }
      else{
          return[
              'success' => false,
              'message' => 'Falha ao atualizar'
          ]; 
      }
  }
}

Controller: Checklistitemcontroller

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use App\Models\ChecklistItem;




class ChecklistItemController extends Controller
{
    private $checklistItem;

    //Construtor do contato do checklistItem
    public function __construct(ChecklistItem $checklistItem)
    {
        $this->checklistItem = $checklistItem;
    }

    public function index()
    {
        $checklistItem =  ChecklistItem::all(); 
        return view('admin.checklistItem.index', ['checklistsItens' => $checklistItem]);
    }

    //Este método apresenta o formulário para cadastrar um novo checklists de itens
   public function novo()
   {
      $checklistItem =  ChecklistItem::all(); 
       return view('admin.checklistItem.novo',['checklistsItens' => $checklistItem]);
   }

   //Método para cadastrar um checklist de item
   public function cadastro(Request $request)
    {
        $checklistItem =  ChecklistItem::all(); 
        $checklistItem->descricao_item = $request->get('descricao_item');
        $checklistItem->ativo = $request->get('ativo');

       //// dd($checklistItem);

        $response = $checklistItem->salvar($checklistItem);  

        dd($response);

            if($response['success']){
                return redirect()
                            ->route('admin.checklistItem') 
                            ->with('success',$response['message']);
            }
            else{
                return redirect()
                            ->back()
                            ->with('error',$response['message']); 
            }   
    }

    //Método que redireciona para a página de atualizar o checklist Item
    public function edita($id)
    {
        return view('admin.checklistItem.edita', ['checklistsItens' => ChecklistItem::find($id)]);
    }

   //Este método remove o contato do checklist do Item
   public function remove(Request $request)
   {
     $checklistItem = ChecklistItem::find($request->id);

      if (!$checklistItem)
       return response()
                ->json(['error' => 'not_found'], 404);

      $response =  $checklistItem->deletar($checklistItem);  

      if($response['success'])
      {
       return response()
               ->json(['success' => $response['message']], 200);  

      }else
      {
            // Caso não delete, informa um erro inesperado
       return redirect()
                ->json(['error' => $response['message']], 500);        
      } 
   }

    //Método de consulta do contato do checklist do Item
    public function consulta(Request $request)
    { 
        $condicoes = [];

        if($request->descricao_item != null){
            $condicoes[] = [DB::raw('upper(descricao_item)'), 'like', DB::raw('upper("%'.$request->get('descricao_item').'%")')];
        }

        if($request->ativo != null){
            $condicoes[] = [DB::raw('upper(ativo)'), 'like', DB::raw('upper("%'.$request->get('ativo').'%")')];

        }


      $request->flash(['descricao_item','ativo']);

      $checklistItem = ChecklistItem::where($condicoes)->orderBy('descricao_item')->get();

      return view('admin.checklistItem.index', ['checklistsItens' =>  $checklistItem]);

    } 
      //Método para atualiza o Checklist do Item
      public function atualiza(Request $request)
      {
        $checklistItem=  ChecklistItem::find($request->get('id'));
        $checklistItem->descricao_item = $request->get('descricao_item');
        $checklistItem->ativo = $request->get('ativo');



        $response =  $checklistItem->alterar($checklistItem);  

          if($response['success'])
          {
              return redirect()
                        ->route('admin.checklistItem') 
                        ->with('success',$response['message']);
          }else
          {
              return redirect()
                        ->back()
                        ->with('error',$response['message']); 

          }

      }
}

Route: web.php

//Gerenciar dados do ChecklistItem
$this->group(['middleware' => ['auth'], 'namespace' =>'admin','prefix'=>'checklistsItens'], function(){
    //Inicio das Rotas de gerenciar os checklistsItens
    $this->post('cadastro','ChecklistItemController@cadastro')->name('checklistItem.cadastro');
    $this->post('checklistItem','ChecklistItemController@consulta')->name('checklistItem.consulta');
    $this->post('atualiza', 'ChecklistItemController@atualiza')->name('checklistItem.atualiza');
    $this->post('remove','ChecklistItemController@remove')->name('checklistItem.remove');
    $this->get('edita/{id}','ChecklistItemController@edita')->name('checklistItem.edita');
    $this->get('novo','ChecklistItemController@novo')->name('checklistItem.novo');
    $this->get('checklistItem','ChecklistItemController@index')->name('admin.checklistItem');
   //Final das Rotas de gerenciar dados do checklistsItens
});

Entity-Relationship model inserir a descrição da imagem aqui

  • 3

    Apparently the method all returns a Collection, not a Model. The method salvar exists in the Model.

  • That’s right Anderson, instead of $checklistItem = Checklistitem::all(); try to make $checklistItem = new Checklistitem;

  • Thanks guys, the solution was to use the $checklistItem = new Checklistitem; in the registration() method instead of $checklistItem = Checklistitem::all();

1 answer

2

The solution was to use the $checklistItem = new Checklistitem; in the method of register() instead of $checklistItem = Checklistitem::all();

Browser other questions tagged

You are not signed in. Login or sign up in order to post.