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?
I didn't read it properly but OneToMany relation is only a virtual relation in ORM, at database level you can only have ManyToOne relation
No idea? 🤔
Обсуждают сегодня