簡體   English   中英

Laravel使用輸入數據透視表進行多對多

[英]Laravel many to many with input pivot table

這是一個用於借用實驗室設備的系統,在該系統中,要求用戶在能夠借用實驗室設備之前先填寫其個人數據。 有由,姓名和地址的工具貸款的形式將存儲在“loan_equipment”表中,選擇從“lab_equipment”表取工具的列表,並且數據將與存儲在“loan_lists”表多對多方法。

我有3個表loan_equipment表(id,名稱,地址),lab_equipment表(id,名稱),貸款列表表(loan_equipment_id,lab_equipment_id,金額)

這是LoanEquipment.php模型:

public function labEquipment()
{
    return $this->belongsToMany('App\LabEquipment', 'loan_lists', 'loan_equipment_id',
    'lab_equipment_id')->withTimestamps();
}

這是LabEquipment.php模型:

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

這是LoanEquipmentController.php控制器:

public function store(Request $request)
{
    $this->validate($request, [
        'name' => 'required|max:128',
        'address' => 'required',
        'labEquipment' => 'required'
    ]);

    $input = LoanEquipment::create($request->all());
    $input->labEquipment()->attach($request->input('labEquipment'));

    Session::flash("flash_notification", [
        "level" => "success",
        "message" => "Success $input->name."
    ]);

    return redirect()->route('loan.index');
}

這是填寫貸款清單工具form.blade.php的視圖或表格:

輸入名稱:

<div class="form-group {{ $errors->has('name') ? 'has-error' : '' }}">
{!! Form::label('name', 'Nama', ['class' => 'col-md-2 control-label']) !!}
<div class="col-md-6">
    {!! Form::text('name', null, ['class' => 'form-control']) !!}
    <strong>{!! $errors->first('name', '<p class="help-block">:message</p>') !!}</strong>
</div>

輸入地址:

<div class="form-group {{ $errors->has('address') ? 'has-error' : '' }}">
{!! Form::label('address', 'Address', ['class' => 'col-md-2 control-label']) !!}
<div class="col-md-6">
    {!! Form::text('address', null, ['class' => 'form-control']) !!}
    <strong>{!! $errors->first('address', '<p class="help-block">:message</p>') !!}</strong>
</div>

選擇並輸入實驗室設備數量

<div class="form-group {{ $errors->has('labEquipment') ? 'has-error' : '' }}">
{!! Form::label('labEquipment', 'Daftar Alat Laboratorium', ['class' => 'col-md-2 control-label']) !!}
<div class="col-md-6">
    @if(count($listsLabEquipment) > 0)
        @foreach($listsLabEquipment as $key => $value)
            <div class="checkbox">
                <label for="">{!! Form::checkbox('labEquipment[]', $key, null) !!}
                    {{ $value }}
                </label>
            </div>
            {!! Form::text('amount', null, ['class' => 'form-control']) !!}
        @endforeach
    @endif
    <strong>{!! $errors->first('labEquipment', '<p class="help-block">:message</p>') !!}</strong>
</div>

如何通過工具貸款表格添加或輸入有關借入工具數量的數據? 並以名稱“ amount”存儲在“ loan_lists”表中。 我應該如何在控制器,模型和視圖中編寫代碼?

謝謝您的幫助

如果我正確理解,則需要在lab_equipment和loan_equipment之間建立多對多關系。 要定義多對多關系,您需要在兩個模型中都添加一個屬於多對關系。 指的是laravel文檔。 https://laravel.com/docs/5.7/eloquent-relationships#many-to-many 如果在列名和表名中使用自定義約定,則必須像在第一個關系聲明中所做的那樣,將它們作為關系聲明中的參數傳遞。 要訪問數據透視表,您需要執行以下操作

public function labEquipment()
{
    return $this->belongsToMany('App\LabEquipment', 'loan_lists', 'loan_equipment_id',
    'lab_equipment_id')->withTimestamps()->withPivot('column1', 'column2');
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM