Jednoduchý e-shop Laravel 5.3 část 7 – přehled objednávak v administraci
Dnešní část kodu mi dala asi nejvíce zabrat, protože se zde používají tzv. relationships. Takže po přihlášení do administrace budu chtít asi zobrazit přehled všech objednávek s informací o objednateli, stavu a cene objednávky. Takže jdeme na to. Metodu index v AdminControlleru si upravím takto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function index() { $orders = Order::with('items','customer')->orderBy('id', 'desc')->paginate(5); foreach ($orders as $order) { $items = Order::find($order->id)->items()->get(); $sum_order[$order->id] = 0; foreach ($items as $item) { $sum_order[$order->id] += $item->pivot->quantity*$item->pivot->price; } $order['sum'] = $sum_order[$order['id']]; } foreach ($orders as $order) { $order['name'] = ucfirst(substr($order->customer->firstname,0,1)).'.'.$order->customer->lastname; } return view('admin.orders', ['orders' => $orders]); } |
Ke každé objdnávce si najdeme jméno objednatele a z jednotlivých položek vypočítáme celkovou cenu objednávky.
přidáme si view admin/orders.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
@extends('layouts.admin') @section('content') <div class="row"> <div class="col-md-12"> <h1>Seznam objednávek</h1> <table class="table table-bordered table-striped"> <thead> <th>Číslo</th> <th>Zákazník</th> <th>Celkem</th> <th>Stav</th> <th>Datum</th> </thead> <tbody> @foreach($orders as $order) <tr> <th><a href="{{ URL::to('/admin/detail/'.$order->id) }}">{{ $order->id }}</a></th> <th>{{ $order->name }}</th> <th>{{ $order->sum }}</th> <th>@if($order->status) <span class="label label-info">Vyřízeno</span> @else <span class="label label-danger">Nevyřízeno</span> @endif </th> <th>{{ $order->created_at->format('d.m.Y H:i') }}</th> </tr> @endforeach </tbody> </table> {{ $orders->links() }} </div> </div> @stop |
Tady bych jen upozornila na změnu barvy ve stavu položky pokud je vyřízená je modrá, pokud ne je červená.
Ještě nutně do layouts/admin.blade.php. No nicméně pokud si administraci pustíme stejně nám fungovat nebude. Protože por Order nemáne zadefinovány items a customer. Takže si musíme připravit ještě tyto metody. Otevřeme si model pro Order a přidáme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * Get the items for the order. */ public function items() { return $this->belongsToMany('App\Product','order_product')->withPivot('quantity','price'); } /** * Get the customer for order * * @return \Illuminate\Database\Eloquent\Relations\HasOne */ public function customer() { return $this->hasOne('App\Customer','id','user_id'); } |
První z nich zobrazuje k objednávce jednotlivé položky s množstvím a cenou. Využíváme k tomu tzv. pivot table. Druhá nám pak k dané objednávce přiřazuje udaje o objednateli. Předpokládáme že každá objednávka má právě jednoho objednatele.
Kodu není na první pohled mnoho, ale trochu mě potrápil než jsem si ujasnila ty relationships.
Aktualní kod opět na githubu