user5035451
user5035451

Reputation:

Showing orders of user in laravel

I'm trying to give ability on user to see his orders. How can I query the database.. I'm trying something like this but I got empty page.. I mean nothing from database. May be my query ins't correct.

This is my controller

public function viewOrders() {
    $user_order = self::$user->user_id;
    $orders = Order::where('user_id', '=', $user_order);
    return View::make('site.users.orders', [
        'orders' => $orders
    ]);
}

Am I getting correctly user_id here? I'm not sure...

Update: I have this in my User model

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

Upvotes: 0

Views: 2357

Answers (2)

Kevin Peña
Kevin Peña

Reputation: 772

If you have Authentication set properly you can do the following.

public function viewOrders(){
    $user = Auth::user();
    return view('site.users.orders',[
        'orders' => $user->orders
    ]);
}

When you use the relationship without using the calling parentheses you get a collection of models which are queried if they're not already loaded. This is called lazy loading, if you want to load a relationship before accessing it you can use eager loading. In this case, it is not necessary though.

Upvotes: 1

S.I.
S.I.

Reputation: 3375

Ok, so based on your route+button+model do it like this

$orders = self::$user->orders()->orderBy('order_id', 'asc')->get();
return View::make('site.users.orders', [
    'orders' => $orders
]);

this should work.. You can remove orderBy clause if you don't need it.

Upvotes: 1

Related Questions