Jednoduchý e-shop Laravel 5.3 část 7 – přehled objednávak v administraci
- Jednoduchý e-shop Laravel 5.3 část 1 – Instalace a databáze
- Jednoduchý e-shop Laravel 5.3 část 2 – databáze seeder a homepage
- Jednoduchý e-shop Laravel 5.3 část 3 – košík a přidání zboží do něj
- Jednoduchý e-shop Laravel 5.3 část 4 – dokončení objednávky
- Jednoduchý e-shop Laravel 5.3 část 5 – odeslání mailu pro objednávku
- Jednoduchý e-shop Laravel 5.3 část 6 – základ administrační části
- Jednoduchý e-shop Laravel 5.3 část 7 – přehled objednávak v administraci
- Jednoduchý e-shop Laravel 5.3 část 8 – detail objednávky v administraci
- Jednoduchý e-shop Laravel 5.3 část 9 – editace produktů v administraci
- Jednoduchý e-shop Laravel 5.3 část 10 – přidání zboží do košíku AJAXEM
- Jednoduchý e-shop Laravel 5.3 část 11 – malé vylepšení modal okno pro přidání do košíku
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