0
respostas

Laravel - Como aplicar um filtro no relacionamento das models

Pessoal, estou aprendendo laravel e me surgiu a seguinte dúvida:

Preciso retornar os dados da tabela product e product_models em 2 lugares diferentes:

1- para um painel de controle onde eu quero que seja listado todos os produtos para que eu possa fazer alterações.

2-para a página que o usuário visualizará, porém aqui quero colocar um filtro no status para exibir apenas produtos ativos.

Uma pequena explicação sobre a estrutura:

1 empresa possui N produtos

1 produto pertence a 1 empresa

1 produto possui N modelos de produto

1 modelo de produto pertence 1 produto

class Company extends Model
{
     public function products()
    {
        return $this->hasMany(Product::class);
    }
}
class Product extends Model
{
    public function productModels()
    {
        return $this->hasMany(ProductModel::class,'product_id');
    }

    public function company()
    {
        return $this->belongsTo(Company::class);
    }
}
class ProductModel extends Model
{
    public function product()
       {
           return $this->belongsTo(Product::class);
       }
}

No primeiro caso está funcional por conta do relacionamento, apenas faço a seguinte chamada $company->products e obtenho todos os produtos e dentro de um foreach de $produtos consigo usar os $product->productModels. Aqui está perfeito.

No segundo caso como devo fazer? criar um segudo método de relacionamento na model Companies e aplicar o filtro nele assim?

public function activeProducts()
    {
        return $this->hasMany(Product::class,'company_id')->where('status',1);
    }

Funcionou assim, mas gostaria de saber se é a melhor forma, fico agradecido se puderem me guiar com os saberes das boas práticas, obrigado!