Laravel - O que tem de errado?

Quando entro na página esta dando o seguinte erro:

“Property [id] does not exist on this collection instance. (View: C:\laravel\Sistema_Psicologia\resources\views\editarUsuario.blade.php)”

Obervação: o campo ID existe na tabela users

public function edit($id)
{
   //$usu = User::find($id);
    $usu = User::join('empresa_usuarios','empresa_usuarios.usr_codigo','users.id')
       ->select('users.*')  
       ->where('emp_codigo', '=', session('empresa_id')) 
       ->where('users.id', '=', $id) 
    ->get();
   if(isset($usu)){
    return view('editarUsuario',compact('usu'));
   }
   return redirect('/usuario');
}

Verifique se o nome da coluna é realmente id ou se está diferente.

Verifica se o seu modelo ‘User’ possui a propriedade id, pois ele não esta sendo encontrado na Collection do Objeto de User(que está sendo retornada na query)

Fala ler realmente a documentação, porque o método join segue a nomenclatura:

  • primeiro parâmetro: nome da tabela que relaciona
  • segundo parâmetro: nome da tabela e o campo que relaciona
  • terceiro parâmetro: sinal (>=,=, <>, <=)
  • quarto parâmetro: o nome da tabela e o campo que relaciona

e no seu faltou isso:

Então deve ser:

                                                                  |
                                                                  V
$usu=User::join('empresa_usuarios','empresa_usuarios.usr_codigo','=','users.id')
	->where('emp_codigo','=',session('empresa_id'))
    ->where('users.id','=',$id)
    ->select('users.*')
    ->get();

Dica

Quanto tiver a duvida da SQL gerada

$usu=User::join('empresa_usuarios','empresa_usuarios.usr_codigo','=','users.id')
    	->where('emp_codigo','=',session('empresa_id'))
        ->where('users.id','=',$id)
        ->select('users.*')
        ->toSql(); // somente a SQL

nesse caso ele te traz a SQL gerada e você pode debugar por isso e ver os problemas

1 curtida

Tem lugares no sistema que não utiliza o = e funciona, mas fiz essas alterações e não funcionou.

Essa segunda dica, como faço para ver o SQL gerado?

O engraçado que eu passo assim e funciona.

$usu = User::find($id);

o campo id existe na tabela.

perdi a paciência então fiz diferente…

  public function edit($id)
    {
      $usu = User::find($id);

       if(isset($usu)){
        $Emp = DB::table('empresa_usuarios')
        ->where ('usr_codigo','=', $id)
        ->where ('emp_codigo','=', session('empresa_id'))
        ->get();
        if(count($Emp)==0){
            abort(404);
        }
        else{
        return view('editarUsuario',compact('usu'));
         }
       }
       return redirect('/usuario');
    }

Só pra ficar bem claro isso não é a solução isso é um paliativo da sua solução, então você manda trazer uma informação e depois não usa, o engraçado do seu código é nesse aspecto e se você não utiliza o Laravel do jeito certo (que é um Framework onde o conceito de caixa fechada está explicito, você pode ter problemas futuros, e isso são alertas).

Eu postei como ver a SQL gerado:

$usu=User::join('empresa_usuarios','empresa_usuarios.usr_codigo','=','users.id')
    	->where('emp_codigo','=',session('empresa_id'))
        ->where('users.id','=',$id)
        ->select('users.*')
        ->toSql(); // somente a SQL

depois dessa linha de um var_dump($usu) que você vai ver a SQL gerada.

1 curtida