4
respostas

Recuperando dados N to N me mais de uma table

Bom dia senhores. Estou com uma dificuldade, tenho as seguintes tabelas: Profissionais Tratamentos Procedimentos

Um profissional pode ter vários tratamentos assim como um tratamento pode ser executado por vários profissionais, assim como o procedimento. Um tratamento pode ter vários procedimentos, assim como um procedimento pode estar em vários tratamentos.

Quando eu vou listar os profissionais preciso fazer a seguinte exibição Profissional Tratamento 1 Procedimento 1 (deve ser o procedimento relacionado ao tratamento e profissional) Procedimento 2 (deve ser o procedimento relacionado ao tratamento e profissional)

Tratamento 2 Procedimento 1 (Existe um procedimento que exatamente o mesmo do tratamento 1 para o tratamento 2) Procedimento 3

Precisava de algo como $profissional->tratamento->procedimento;

4 respostas

Oi Diego, tudo bom?

Acredito que o que você precise, seja de alguns relacionamentos de cardinalidade NxN. No nosso caso, precisariamos dizer que um profissional tem varios tratamentos e um tratamento tem varios procedimentos, algo como:

class Profissional extends Model
{
    public function tratamentos()
    {
        return $this->belongsToMany('App\Tratamento');
    }
}

class Tratamento extends Model
{
  public function profissionais()
  {
    return $this->belongsToMany('App\Profissional');
  }
  public function procedimentos()
  {
    return $this->belongsToMany('App\Procedimento');
  }
}

class Procedimento extends Model
{
    public function tratamentos()
        {
            return $this->belongsToMany('App\Tratamento');
        }
}

Para realizar a busca generalizada de procedimentos por profissional eu recomendo você dar uma olhada em has many through na documentação =)

Qualquer duvida é só falar.

Abraço!

Então fiote :P To ligado sobre isso sim sim :D valeu, mas já tirado duvidas sobre relacionamento ManyToMany , mas a questa é a seguinte eu gostaria de passar pegar um PROFISSIONAL ir viajando até os TRATAMENTOS pegar os TRATAMENTOS desse PROFISSIONAL depois com esses TRATAMENTOS buscar os PROCEDIMENTOS que estão tanto em PROFISSIONAL quanto em TRATAMENTO.

Tipo assim eu tenho uma tabela chamada PROFISSIONAIS ela faz relação de MANY TO MANY com TRATAMENTOS, pois um PROFISSIONAL pode ter vários TRATAMENTOS. A tabela PROFISSIONAIS também faz relação de MANY TO MANY com a tabela PROCEDIMENTOS, da mesma forma que um PROFISSIONAL pode ter vários PROCEDIMENTOS e um PROCEDIMENTO pode ser realizado por vários PROFISSIONAIS. Até ai lindo neah <3 beleza. AGORA SIM O BIXO PEGA. Então um tratamento pode ter vários procedimentos e um procedimento pode estar em vários procedimentos. Tentei dar uma olhada no hasManyThrough(), mas não consegui utilizar de forma correta vou tentar novamente. Espero que a explicação tenha sido melhor agora, mas já agradeço a atenção :P

... e um procedimento pode estar em vários procedimentos

Aqui a gente tem um relacionamento NxN recursivo em Procedimento.

Profissionais NxN Procedimentos

Profissionais NxN Tratamentos.

Tratamento NxN procedimentos.

Isso mapeado seria algo do genero:

class Profissional extends Model
{
    public function tratamentos()
    {
        return $this->belongsToMany('App\Tratamento');
    }
    public function procedimentos()
    {
       return $this->belongsToMany('App\Procedimento');
    }
}

class Tratamento extends Model
{
  public function profissionais()
  {
    return $this->belongsToMany('App\Profissional');
  }
  public function procedimentos()
  {
    return $this->belongsToMany('App\Procedimento');
  }
}

class Procedimento extends Model
{
    // implementar id, parent_id e outros atributos do modelo
    public function tratamentos()
        {
            return $this->belongsToMany('App\Tratamento');
        }
    public function profissionais()
    {
        return $this->belongsToMany('App\Profissional');
    }
    public function childrenProcedimentos()
{
    return $this->hasMany('Procedimento', 'parent_id', 'id');
}
}

Com isso você consegue acessar:

 $profissional->tratamentos() // tratamentos do profissional
 $profissional->procedimentos() // procedimentos do profissional
 foreach($profissional->procedimentos() as $procedimento){
  $procedimento->childrenProcedimentos(); // procedimentos dos procedimentos do profissinal
}

Repara que os procedimentos filhos são um relacionamento em arvore. Para varrer todos os possiveis procedimentos dentro de um procedimento talvez seja legal separar um método recursivo para varrer a arvore toda =)

Abraço e bons estudos!

ta legal entao kkk O.o meio confuso parent_id??? procedimentos dos procedimento??? o.O preciso chegar até os procedimento mais ou menos dessa forma vou colocar na tela do para o usuarios o TRATAMENTO depois vou listar logo a baixo os procedimentos, logo apos quero listar outro TRATAMENTO com seus respectivos PROCEDIMENTOS,lembrando que deve ser do mesmo profissional