php - 如何在每个表上显示 4 个不同的数据,以便在 Laravel 中名为 Transaction 的一个表上看到?

标签 php mysql laravel

我是 Laravel 的新手,正在探索更多要学习的东西。我正在做一个视频商店的项目。它有 5 个表:

  • 客户(customer_id、姓名、地址)
  • 类别(category_id、名称、描述、价格)
  • 视频(video_id、标题、描述、category_id、库存)
  • 租金(customer_id, rented_at, total_amount, interest_amount, status)
  • 交易(video_id、价格、transaction_id、数量、状态、returned_at [date])

我想在租借表中显示带有相应类别名称和价格的视频标题。

这是我的 RentalController.php 代码

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\Http\Requests;

use Carbon\Carbon;


use App\Transaction;
use App\Customer;
use App\Category;
use App\Rental;
use App\Video;
use DB;


class RentalController extends Controller {

    public function __construct(){
        $this->middleware('auth');
    }

     public function index(){
        $rentals = Rental::all();
        return view('rental.index', compact('rentals'));
    }

     public function create(){
        $rental = new Rental;
        $customers = Customer::pluck('name','id');
        $videos = Video::pluck('title','id');
        $categories = Category::pluck('price', 'id');
        return view('rental.create', compact('rental', 'customers', 'videos', 'categories'));

    }

    public function store(Request $request) {

        $this->validate($request,[

            'videos.*.id' => 'required'
        ]);

        $data = $request->all();

        DB::transaction(function() use ($data) {

        $rental = new Rental;

        $rental->customer_id = $data['customer_id'];
        $rental->rented_at = Carbon::now();

        $rental->interest_amount = 0;
        $rental->status = 'rented';
        dd($data['videos']);
        $rental->save();

        foreach ($data ['videos'] as $video) {

            $detail = new Transaction;
            $detail->video_id = $video['id'];
            $detail->rental_id = $rental->id;
            $detail->quantity = 1;
            $detail->status = 'rented';
            $detail->price = Video::find($video['id'])->category->price;

            $detail->save;

            $total_amount = $detail->price;

        }

        $rental->total_amount = $total_amount;
        $rental->save();

    });

        flash('Request Successfully Saved', 'success');
        return redirect()->action('RentalController@index');
    }

    public function edit(Rental $rental) {

        $customers = Customer::pluck('name','id');
        $videos = Video::pluck('title','id');
        $categories = Category::pluck('price', 'id');

        return view('rental.edit',compact('rental', 'customers', 'videos', 'categories'));
    }

    public function update(Request $request, Rental $rental) {
        $data = $request->all();

        $rental->customer_id = $data['customer_id'];
        $rental->rented_at = $data['rented_at'];
        $rental->total_amount = $data['total_amount'];
        $rental->interest_amount = $data['interest_amount'];
        $rental->status = $data['status'];

        $rental->save();

    flash('Request Successfully Updated', 'success');
        return redirect()->action('RentalController@index');
    }

    public function destroy(Rental $rental) {
        $rental->delete();
        flash('Request Successfully Deleted', 'success');
        return redirect()->action('RentalController@index');
    }

    public function show(Rental $rental) {
        return view('rental.show', compact('rental'));
    }
}

创建.blade.php

 @extends('layouts.app')

    @section('content')


    <div class="row">
        <h1 class = "page-header">Rent a Video</h1>
            <div class="col-md-12">
            {!! Form::model($rental, ['action' => 'RentalController@store', 'method' => 'POST', 'class' => 'form']) !!}

            @include('rental.form')
            {!! Form:: close() !!}
        </div>
</div> @endsection

表单创建.php

<div class= "form-group">
    {!! Form::label('customer_id', 'Customer'); !!}
    {!! Form::select('customer_id', $customers , null, ['class' => 'form-control','placeholder'=>'Customer Name']); !!}
</div>

<div class= "form-group">
    {!! Form::label('total_amount', 'Total Amount'); !!}
    {!! Form::text('total_amount', null, ['class' => 'form-control']); !!}
</div>  
<table class="table table-bordered">


    <thead>
        <tr>
            <th>Title</th>
            <th>Category</th>
            <th>Price</th>
        </tr>
    </thead>

    <tbody>
            <tr>
            <td>{!! Form::select('videos[1][id]', $videos, null, ['class' => 'form-control', 'placeholder' => 'Choose a video']); !!}</td>
            <td></td>
            <td><</td>

        </tr>


        <tr>
            <td>{!! Form::select('videos[1][id]', $videos, null, ['class' => 'form-control', 'placeholder' => 'Choose a video']); !!}</td>
            <td></td>
            <td></td>
        </tr>

        <tr>
            <td>{!! Form::select('videos[2][id]', $videos, null, ['class' => 'form-control', 'placeholder' => 'Choose a video']); !!}</td>
            <td></td>
            <td></td>
        </tr>
    </tbody>    
</table>

{!! Form::submit('Save', ['class' => 'btn btn-success']); !!}

最佳答案

好的,首先,你的数据库结构应该是这样的:

客户(customer_id、姓名、地址)

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

类别(category_id、名称、描述、价格)

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

视频(video_id、标题、描述、category_id、股票)

public function category()
{
    return $this->belongsTo('App\Category');
}

租金(rental_id, customer_id, rented_at, total_amount, interest_amount, status)

public function customer()
{
    return $this->belongsTo('App\Customer');
}

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

交易(transaction_id、rental_id、price、video_id、数量、状态、returned_at [date])

public function rental()
{
    return $this->belongsTo('App\Rental');
}

public function video()
{
    return $this->belongsTo('App\Video');
}

Explained: Customer is the peak of the hierarchy , having only many Rental as its children .. Rental as being a child of Customer we declare that it belongs to a Customer .. Also having one Transaction .. Transaction belongs to a rental, as well a video.. then Video belongsTo a Category and so Category hasMany videos ..

现在,关于如何显示数据的是:

按用户查看租金

$customers = Customers::all();
foreach($customers as $customer)
{
    echo '<h1>'.$customer->name .'</h1>';
    echo '<h3>Rentals</h3>';
    foreach($customer->rentals as $rental)
    {
        echo $rental->total_amount;
        // and so on ..
        foreach($rental->transactions as $transaction)
        {
            echo $transaction->video->title;
            // and so on ..
            echo $transaction->video->category->price;
        }
    }
}

关于php - 如何在每个表上显示 4 个不同的数据,以便在 Laravel 中名为 Transaction 的一个表上看到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43904958/

相关文章:

java - SQL 查询包含选定的自动增量行时无法执行

php - laravel 政策授权总是假的

php - php Redis::hscan使用通配符名称和条件检索所有哈希

php - MySQL 查询优化 - 分组值

php - 使自动完成菜单中的 MySQL 项目可单击

javascript - 调用函数时更改 div 颜色 - jquery

PHP 静态方法初始化 $_SESSION 变量?

c++ - Visual Studio 2010 - 链接 MySQL

mysql - 识别缺失的空间

php - 如何验证和清理表单复选框数组?