Getting Values from Nested Relationships in Laravel

Maintaining Database Relationships in Laravel is quite a task but when it comes to nested relationships, things get a bit tangled up to handle.

Maintaining Database Relationships in Laravel is quite a task but when it comes to nested relationships, things get a bit tangled up to handle.

In the below example, we’ll look on how to handle nested relationships situation in Laravel.

Please note, this example will not include any steps for creating database migrations and seeders.

Scenario

Let’s take an example for customers & products and their corresponding types. The Relation between Customer and Product & between Product and Type is hasMany respectively. We’ll go through these below.

Customer Model

public function product() {
   //foreign_key, local_key
   return $this->hasMany( 'App\Product', 'customer_id', 'id' );
}

Product Model

public function type() {
   return $this->hasMany( 'App\Type' );
}

Now with the simple setup for our relationship we’re ready to get data from our DB.

Getting data from nested relationship

Consider that we’ll be needing to fetch customer’s selected type name for some product.

$customer = Customer::with('product.type')->findOrFail($customer_id);
$items = collect();
$m->product->each(function($q) use(&$items) {
 $items = $items->concat($q->type);
});
$name = $items->pluck('name');
dd($name);

Conclusion

If you’ve any questions or feedback regarding this code. Please leave us a comment below or you can also follow us on Twitter.

Comments