Thursday, February 8, 2018

Many-to-many relation on laravel - development

Many-to-many relation on laravel

I have a question about many-to-many relations in laravel 5.5

I have these tables named ads, attributes, categories, ads_attributes
categories is one-to-many related to ads, so is attributes

and ads and attributes are many-to-many related in ads_attributes

The problem is: the primary keys in attributes are ['name', 'category_id'] (I know it’s stupid but that’s what is implemented atm and I’m not gonna restructure my tables)

So in ads_attributes I have these columns: ['attribute_name', 'category_id', 'ad_id']

Laravel belongsToMany() method gives me this:

select `attributes`.*, `ads_attributes`.`ad_id` as `pivot_ad_id`, `ads_attributes`.`attribute_name` as `pivot_attribute_name`, `ads_attributes`.`value` as `pivot_value` from `attributes` inner join `ads_attributes` on `attributes`.`name` = `ads_attributes`.`attribute_name` where `ads_attributes`.`ad_id` in ('11')

while I need something like:

select `attributes`.*, `ads_attributes`.`ad_id` as `pivot_ad_id`, `ads_attributes`.`attribute_name` as `pivot_attribute_name`, `ads_attributes`.`value` as `pivot_value` from `attributes` inner join `ads_attributes` on `attributes`.`name` = `ads_attributes`.`attribute_name` and `attributes`.`category_id` = `ads_attributes`.`category_id` where `ads_attributes`.`ad_id` in ('11')

Any idea?

P.s sorry about my bad English, it’s not my mother tongue



from Laravel Questions and Answers https://laravelquestions.com/laravel/many-to-many-relation-on-laravel/
via Lzo Media

No comments:

Post a Comment