[英]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.