ProEvilz
ProEvilz

Reputation: 5445

How to setup laravel relationship

I'm using Larvel 5.3 and I have four tables I wish to set up relations with.

- Users
- Orders

- Products
- Brands

An order belongs to a user and a user has many orders. A product belongs to many orders and additionally, to one brand. A brand has many products.

I'm trying to find a way to get a user's order, with the products AND the brand of the products.

User.php

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

Order.php

public function user() {
  return $this->belongsTo('App\User');
}
public function products(){
  return $this->hasMany('App\Product');
}

Product.php

public function orders() {
  return $this->belongsToMany('App\Orders');
}
public function brand(){
  return $this->belongsTo('App\Brand');
}

Brand.php

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

I wish to get back an array containing the users orders, along with each orders products and the products' brand.

Could anyone advise?

Upvotes: 0

Views: 32

Answers (1)

EddyTheDove
EddyTheDove

Reputation: 13259

First, Products and Orders have a many to many relationship.

public function products(){
    return $this->belongsToMany('App\Product');
}

Get a user's order first. Because users have many orders, you need to specify which order you want to view the products list from.

$order = $user->orders->first();

Then get all products and their brand

foreach($order->products) ...

For your super array, you can try Eager Loading

$arr = User::with('orders.products.brand')->get(); //Not tested

Upvotes: 1

Related Questions