Error trying to get property of non-object from Laravel

1

Contextualization: The register method of the ProjectController.php class saves the project data to the database and then redirects to the page in the editing mode. Redirecting the page in edit mode requires the id of the project.

Problem: But after the project was saved, redirecting to the edit page caused the following error:

  

Trying to get property of non-object

Search: I already researched the error, but the proposed solutions did not solve the problem.

Method tag tag of the ProjectController.php class:

  //Método para cadastrar os dados gerais do projeto 
  public function cadastro(Request $request, Projeto $projeto)
  {
    $novoProjeto =  $projeto->salvar($request->all());

    return redirect()->route('projeto.edita', $novoProjeto->id);
  }

Save method class of the Project.php class :

public function salvar(array $data)
{
    $this->tipo_processo = $data['tipoProcesso'];
    $this->processo = $data['numProcesso'];
    $this->dt_protocolo = $data['dtProtocolo'];
    $this->setor_origem_id = $data['setor'];
    $this->proponente_id = $data['proponente'];
    $this->nome_projeto = $data['nomeProjeto'];
    $this->dt_inicio = $data['dtInicio'];
    $this->dt_fim = $data['dtFim'];
    $this->dias_intercalados = $data['diasIntercalados'];
    $this->tipo_projeto_id = $data['tipoProjeto'];
    $this->modalidade_apoio_id = $data['modalidadeApoio'];
    $this->localidade_id = $data['localidade'];
    $this->valor_solicitado = $data['vlSolicitado'];
    $this->arquivo_fisico = $data['arquivo'];

    // Use a classe de Carbon ao invés disso, e trabalhe com Mutators
    $this->dt_lancamento = new DateTime();
    $this->dt_lancamento->format('d-m-Y H:i:s');

    $this->dt_alteracao = null;
    $this->usu_lancamento_id = Auth::user()->id; //recebe o id do usuário logado
    $this->usu_responsavel_id = Auth::user()->id; //recebe o id do usuário logado


    return $this->save();   
}

web.php project design route code:

//Gerenciar Projetos
$this->group(['middleware' => ['auth'], 'namespace' =>'admin','prefix'=>'projetos'], function(){
    //Inicio das Rotas de gerenciar projetos
    $this->post('cadastro','ProjetoController@cadastro')->name('projeto.cadastro');
    $this->post('projeto','ProjetoController@consulta')->name('projeto.consulta');
    $this->post('atualiza', 'ProjetoController@atualiza')->name('projeto.atualiza');
    $this->post('remove','ProjetoController@remove')->name('projeto.remove');
    $this->get('edita/{id}','ProjetoController@edita')->name('projeto.edita');
    $this->get('novo','ProjetoController@novo')->name('projeto.novo');
    $this->get('projeto','ProjetoController@index')->name('admin.projeto');
   //Final das Rotas de gerenciar projetos
});
    
asked by anonymous 09.04.2018 / 19:37

1 answer

0

Solution: the error was in the save method that returns the Boolean value, but the object is expected. Here is the code snippet for the Project.php class

  <?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use DB;
use SoftDeletes;
use Carbon\Carbon;

class Projeto extends Model
{
    protected $table = "projetos";
    protected $primaryKey = 'id';
    //public $incrementing = false;
    public $timestamps = false;
    protected  $fillable  = ['tipo_processo','processo','dt_protocolo', 'demo','setor_origem_id','proponente_id','nome_projeto',
                               'dt_inicio','dt_fim','dias_intercalados','tipo_projeto_id','modalidade_apoio_id','localidade_id',
                               'valor_solicitado','arquivo_fisico','dt_lancamento','dt_alteracao','dt_alteracao','usu_lancamento_id', 
                               'usu_responsavel_id'];


    public function salvar(array $data)
    {
        $dataInsert['tipo_processo'] = $data['tipoProcesso'];
        $dataInsert['processo'] = $data['numProcesso'];
        $dataInsert['dt_protocolo'] = $data['dtProtocolo'];
        $dataInsert['setor_origem_id'] = $data['setor'];
        $dataInsert['proponente_id'] = $data['proponente'];
        $dataInsert['nome_projeto'] = $data['nomeProjeto'];
        $dataInsert['dt_inicio'] = $data['dtInicio'];
        $dataInsert['dt_fim'] = $data['dtFim'];
        $dataInsert['dias_intercalados'] = $data['diasIntercalados'];
        $dataInsert['tipo_projeto_id'] = $data['tipoProjeto'];
        $dataInsert['modalidade_apoio_id'] = $data['modalidadeApoio'];
        $dataInsert['localidade_id'] = $data['localidade'];
        $dataInsert['valor_solicitado'] = $data['vlSolicitado'];
        $dataInsert['arquivo_fisico'] = $data['arquivo'];
        $dataInsert['dt_lancamento'] = \Carbon\Carbon::now();
        $dataInsert['dt_alteracao'] = null;
        $dataInsert['usu_lancamento_id'] = auth()->user()->id; //recebe o id do usuário logado
        $dataInsert['usu_responsavel_id'] = auth()->user()->id; //recebe o id do usuário logado

        return $this->create($dataInsert);   
    }

   //Este método atualiza os dados do Projeto
   public function alterar(Projeto $projeto) : Array
   {
   DB::beginTransaction();

       $projeto = $this->save();
       if($projeto){
           DB::commit();
           return[
               'success' => true,
               'message' => 'Sucesso ao atualizar'
           ];   
       }
       else{
           DB::rollback();
           return[
               'success' => false,
               'message' => 'Falha ao atualizar'
           ]; 
       }
   }


   //Este método remove os dados da Projeto
 public function deletar(Projeto $projeto) : Array
 {
   DB::beginTransaction();

     $projeto = $this->delete();
     if($projeto){
         DB::commit();
         return[
             'success' => true,
             'message' => 'Sucesso ao excluir'
         ];   
     }
     else{
         DB::rollback();
         return[
             'success' => false,
             'message' => 'Falha ao excluir'
         ]; 
     }
 }

//Relacionamentos entre a tabela Projetos e outras do banco de dados

}
    
12.04.2018 / 20:20