Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Relacionamentos Laravel

Estou com problemas na criação de relacionamentos entre tabelas. Passo pelo seguinte problema: tenho uma tabela chamada produto, outra chamada referencia e outra chamada tipo. O produto tem uma referencia e a referencia tem vários produtos. A referencia tem um tipo e o tipo tem varias referencias.

tentei fazer isso da seguinte forma: Produto

class Produto extends Model {

    protected $fillable = array('cor','quantidade','referencia_id');

    public function referencia(){
        return $this->belongsTo('estoque\Referencia');
    }

Referencia

class Referencia extends Model {

    protected $fillable = array('nome_referencia','valor','tipo_id');

    public function produto(){
        return $this->hasMany('estoque\Produto');
    }

    public function tipo(){
        return $this->belongsTo('estoque\Tipo');
    }

}

Tipo:

class Tipo extends Model {

    public function referencia(){
        return $this->hasMany('estoque\Referencia');
    }


}

Infelizmente dessa forma não deu certo. Alguém pode me ajudar a resolver isso?

4 respostas

Vejo que falta a tabela intermediária nesse relacionamento.

Vou compartilhar um exemplo meu:

  • 1 User tem N Clients
  • 1 Client tem N Users

Models: Users, UserClients e Clients

Migrations: CreateUsersTable, CreateClientsTable, CreateUserClientsTable

class Users extends Model {
// ... fillable, timestamps, etc
public function clients()
    {
        return $this->belongsToMany(
            Clients::class, 'user_clients',
            'user_id', 'client_id'
        );
    }
// ...
class Clients extends Model {
// ... fillable, timestamps, etc
public function users()
    {
        return $this->belongsToMany(
            Users::class, 'user_clients',
            'client_id', 'user_id'
        );
    }
// ...
class UserClients extends Model
{
// ... fillable, timestamps, etc
}

Na prática o uso é:

$user = Users::find($id);

dd($user->clients->first()->name;

Opa Ricardo, eu agradeço pela ajuda mas o meu problema não eh uma relação muitos para muitos. O produto tem uma referencia e a referencia tem vários produtos. A referencia tem um tipo e o tipo tem varias referencias.

E aí, alguem me ajuda nessa?

solução!

Consegui resolver o problema! Estava tudo certo menos o nome da chave estrangeira de - tipo - que estava diferente na tabela: produtos. Eu coloquei: tipo_de_material_id. Mas o laravel não aceitou pq por convenção parece que ele quer que o nome da chave estrangeira seja do mesmo jeito do nome da classe que deseja relacionar(que no caso era a classe: Tipo) com o sufixo: _id. A coluna chave estrangeira na tabela produtos ficou dessa forma: tipo_id. Que eh o mesmo nome da classe que eu desejo relacionar(Tipo) com o sufixo _id. Não sei se o que estou falando tem outras possibilidades de fazer, mas desse jeito funcionou legal aqui, consegui depois de vários testes.