Laravel - É possível fazer um join no model?

acho loucura mais…vai que existe? kk
preciso fazer um join da tabela users com a tabela empresas, para assim conseguir pegar o campo chave da empresa e armazenar na sessão.
é possível? caso não seja possível, qual a melhor forma de armazenar o código da empresa na sessão?

Sim é possível! agora precisamos saber tudo que está em volta!

Estou usando aquele login padrão do laravel, as sessions criado por ele é baseado no model? porque se for creio eu que será possível criar uma variável de sessão com o id da empresa, eu preciso de relacionar as tabelas.

Exemplo:

SELECT * FROM USERS INNER JOIN EMPRESAS ON 
USERS.ID=EMPRESAS.USR_CODIGO

Meu model está assim…

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */ 
    protected $fillable = [
        'id','name', 'email', 'password','username','usr_perfil',
        'usr_acesso_dashboard','usr_acesso_cadastro_pessoas','usr_acesso_cadasto_gerais',
        'usr_acesso_relatorios','usr_acesso_prontuario','usr_acesso_configuracoes','usr_acesso_cadusuarios','usr_ativo','usr_acesso_consultas'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

Nem precisa de um join:

//recupera o usuário
$user = Auth::user();
//recupera a empresa
$empresa = Empresa::where('usr_codigo', $user->id)->first();
//ou
$empresa = \DB::table("empresas")->where('usr_codigo', $user->id)->first();

Ai você tem os dados da empresa mediante o código do usuário logado.

Se você tivesse feito a relação na classe User também sanava essa parte de recuperação

isso ficaria onde? no próprio model USER?
ou teria que utilizar nos controllers mesmo?

Você precisa colocar isso na parte de autenticação do usuário, quando ele acabar de autenticar você usa o id do usuário logado e escreve essa builder e já guarda na session o id da empresa

é assim que se cria a varável de sessão em Laravel?

$user = Auth::user();
$empresa = Empresa::where('usr_codigo', $user->id)->first();
$empresa = \DB::table("empresas")->where('usr_codigo', $user->id)->first();
Session::get($empresa);

Na documentação explica como é que armazena valores em uma sessão, exemplo:

// Via a request instance...
$request->session()->put('key', 'value');

// Via the global helper...
session(['key' => 'value']);

No seu caso:

$user = Auth::user();
$empresa = Empresa::where('usr_codigo', $user->id)->first();
$empresa = \DB::table("empresas")->where('usr_codigo', $user->id)->first();
session(['empresa_id' => $empresa->id]);

Para recuperar:

$value = session('empresa_id');

Li em outro fórum que o Controller VerificantionController é onde valida o usuário, não está funcionando estou tentando exibir o retorno na View mas não aparece, só o nome da varável…

O método onde autentica está assim, o padrão do Laravel.

public function __construct()
{
    $this->middleware('auth');
    $this->middleware('signed')->only('verify');
    $this->middleware('throttle:6,1')->only('verify', 'resend');
    $user = Auth::user();
    //$empresa = Empresa::where('usr_codigo', $user->id)->first();
    $empresa = \DB::table("empresas")->where('usr_codigo', $user->id)->first();
    session(['empresa_id' => $empresa->id]);
}

e na View eu chamo chamo a variável de sessão assim…

Session::get($empresa);

Porém ele retorna o próprio nome da variável

image

É uma pena que você não está aprendendo Laravel, eu disse assim pra você na hora que loga, você coloca o código, você não entendeu.
Bom deixa eu explicar novamente, sabe o botão da tela de login, aonde você digita usuário e senha e ele cai num método do controller é ali que você faz isso e não no construtor dessa classe, porque se não ele vai ficar reescrevendo e isso não é bom…

Ratificando: no login do usuário aonde ele digita usuário e senha e aperta o botão de entrar, ele cai em um método e nesse método que você faz isso …

Falta atenção eu coloquei o código de recuperar a sessão se passou uma variável nela … :frowning:

estou aplicando o que vc me falou em um controller que eu mesmo criei pra pelo menos quero ver funcionando. pq o método padrão de autentificação do laravel é muito confuso, era por isso que não queria utiliza-lo. não sei qual o método que devo aplicar essa lógica.

mas, enfim! como faço para obter o valor da varável de sessão e exibir na view? só estou tentando descobrir se está funcionando antes de fazer exatamente o que eu preciso.

conseguir entender, como funciona! quando tiver tudo ok eu dou um retorno.

Resolvido galera!

Dentro do Controller LoginController nele possui o trate do PHP que é o use AuthenticatesUsers, aí dentro dessa classe eu criei o método authenticated.

Vlw pela força @Dragoon, me ajudou bastante!

public function authenticated($request, $usuario){
    $user = Auth::user();
    $empresa = \DB::table("empresa_usuarios")
                 ->where('emp_codigo', $user->id)
                 ->first();
    session(['empresa_id' => $empresa->emp_codigo]); 
}
1 curtida