Tables:
products
id - integer
name - string
factories
id - integer
name - string
factory_product
factory_id - integer
product_id - integer
I want to get products that are produced by all factories.
How to do that?
I need SQL
code.
CodePudding user response:
Try this query:
SELECT product_id
FROM factory_product
GROUP BY product_id
HAVING COUNT(factory_id) = (SELECT COUNT(*) FROM factories);
Factories Table:
id | name |
---|---|
f1 | fa |
f2 | fb |
f3 | fc |
f4 | fd |
f5 | fe |
Product Table:
id | name |
---|---|
p1 | pa |
p2 | pb |
p3 | pc |
Factory_Product Table:
factory_id | product_id |
---|---|
f1 | p1 |
f1 | p2 |
f1 | p3 |
f2 | p1 |
f2 | p3 |
f3 | p1 |
f3 | p3 |
f4 | p1 |
f4 | p3 |
f4 | p2 |
f5 | p1 |
f5 | p2 |
f5 | p3 |
The Output my Query Producing:
product_id |
---|
p1 |
p3 |
CodePudding user response:
By use of belongsToMany relation
here this function add in your products model
public function withFactories() { return $this->belongsToMany(factories::class, factory_product::class,'product_id', 'factory_id'); }
add function in your controller
$all_product = products::with('withFactories)->get();
here must have foreign key in factory_product table
here you can get value of product value & Factories detail in withFactories array