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