I'm using laravel v8 and i have a products table to hold a product data, the product will have a child product and i'm connecting it using product_relations table.
products table:
| id | name |
|---|---|
| 1 | PC |
| 2 | Mouse |
| 3 | VGA |
product_relations table
| id | parent_product_id | child_product_id |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 1 | 3 |
i want to retireve the child product model using the parent product model, to achieve this i'm trying to use hasManyThrough function in class model like this;
class Product extends Model{
protected $primaryKey = 'id';
protected $table = 'products';
public function childs(){
return $this->hasManyThrough(self::class, ProductRelation::class, 'child_product_id', 'id');
}
}
class ProductRelation extends Model{
protected $primaryKey = 'id';
protected $table = 'product_relations';
}
then i tried to retrieve it like this:
$childs = Product::find(1)->childs()->get();
but it returns an empty set of product model
CodePudding user response:
1- this kind of relation is not necessary. because parent product and children products have one-to-many relations not many-to-many.
2- hasManyThrough get destination class address not self::class.(like: ChildProduct::class)
CodePudding user response:
You are looking for a many-to-many with a pivot table:
public function childs(){
return $this->belongsToMany(self::class, 'product_relations', 'parent_product_id', 'child_product_id');
}
