Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Relacionamento Many To Many

Bom dia pessoal; Tenho as seguintes tabelas: profissionais - areas - areas_profissionais. Preciso acessar os nomes das areas de atuação de cada profissional. Atualmente estou fazendo dessa forma: criei um model e controller para AreaProfissional Fiz as relações entre a tabela AreaProfissional e as tabelas profissionais e areas. Dentro desse Controller e Model (AreaProfissional) eu consigo usar o metodo profissional/area para retornar os dados do profissional ou da area

Ex:

class AreaProfissional extends Model
{
    public $timestamps = false;
    protected $primaryKey = 'profissionais_id';
    protected $table = 'profissionais_areas';
    protected $fillable = array('areas_id', 'profissionais_id');


    public function profissional()
    {
        return $this->belongsTo('drumuarama\Profissional', 'profissionais_id');
    }

    public function area()
    {
        return $this->belongsTo('drumuarama\Area', 'areas_id');
    }

}

mas agora eu gostaria de acessa a tabela profissionais e listar os profissionais por area ou apenas exibir suas respectivas areas. Gostaria de uma pequena ajuda ai gente :P

1 resposta
solução!

Esse talvez seja o relacionamento mais complicado de todos, mas também o mais poderoso no Laravel.

Você não precisa dessa classe AreaProfissional.

Provavelmente você tem 3 tabelas no banco

profissionais - id - nome

areas - id - nome

profissionais_areas - areas_id - profissionais_id

Então você tem as classes abaixo:

class Area extends Model
{
    public function profissionais()
    {
        return $this->belongsToMany('App\Profissional', 'profissionais_areas', 'areas_id', 'profissionais_id');
    }
}

class Profissional extends Model
{
    public function areas()
    {
        return $this->belongsToMany('App\Area', 'profissionais_areas', 'profissionais_id' , 'areas_id');
    }
}

Com isso você pode listar todos os profissionais de uma Área usando:

$area = App\Area::find(1);

foreach ($area->profissionais AS $profissional)
 {
    //processe conforme desejar aqui
}

Mas e para inserir um novo profissional na Área?

$area = App\Area::find(1);
$profissional = $area->profissionais()->create
([
    'nome' => 'José da Silva'
]);
`

Existem várias outras opções para inserir, apagar, atualizar e outros.

Referências: