I have the following function:
public function searchJoin(){
$first = $this->getModel()
->join('tarea_x_usuario', 'tarea_x_usuario.idTarea', '=', 'tarea.id')
->rightJoin('usuario', 'usuario.id', '=', 'tarea_x_usuario.idUsuario')
->join('role_x_usuario', 'role_x_usuario.idUsuario', '=', 'usuario.id')
->join('role', 'role.id', '=', 'role_x_usuario.idRole')
->get();
return $this->getModel()
->join('tarea_x_usuario', 'tarea_x_usuario.idTarea', '=', 'tarea.id')
->rightJoin('usuario', 'usuario.id', '=', 'tarea_x_usuario.idUsuario')
->join('role_x_usuario', 'role_x_usuario.idUsuario', '=', 'usuario.id')
->join('role', 'role.id', '=', 'role_x_usuario.idRole')
->where('role.role','=','ADMINISTRADORR')
->union($first)
->get();
}
It throws me the following error:
BadMethodCallException in Macroable.php line 74: Method getBindings does not exist.
I also tried doing the following query:
public function searchJoin() {
$first = $this->getModel()
->join('tarea_x_usuario', 'tarea_x_usuario.idTarea', '=', 'tarea.id')
->rightJoin('usuario', 'usuario.id', '=', 'tarea_x_usuario.idUsuario')
->join('role_x_usuario', 'role_x_usuario.idUsuario', '=', 'usuario.id')
->join('role', 'role.id', '=', 'role_x_usuario.idRole')
->where('role.role', '=', 'ADMINISTRADORR')
->get();
$two = $this->getModel()
->join('tarea_x_usuario', 'tarea_x_usuario.idTarea', '=', 'tarea.id')
->rightJoin('usuario', 'usuario.id', '=', 'tarea_x_usuario.idUsuario')
->join('role_x_usuario', 'role_x_usuario.idUsuario', '=', 'usuario.id')
->join('role', 'role.id', '=', 'role_x_usuario.idRole')
->get();
dd($first->union($two)->get());
}
The two queries work, it throws an error in the union.
The sequence of errors are:
I think it's because you're applying the method
get()
last. Regarding the documentation, it indicates that it is applied beforeget
, remove them and do the testhttps://laravel.com/docs/5.3/queries#unions