Laravel многие ко многим с входной сводной таблицей - PullRequest
0 голосов
/ 02 января 2019

Это система для заимствования лабораторного оборудования, где пользователи должны сначала заполнить свои личные данные, прежде чем иметь возможность заимствовать лабораторное оборудование. Существует форма предоставления инструмента, состоящая из имени и адреса, которые будут храниться в таблице "loan_equipment" , выбор списка инструментов, взятых из таблицы "lab_equipment" , и данные будут храниться в таблице loan_lists методом «многие ко многим».

У меня есть 3 таблицы таблица loan_equipment (идентификатор, имя, адрес), таблица lab_equipment (идентификатор, имя), таблица ссуды заемщика (идентификатор_доставки_доставки, идентификатор_защитной_записи, сумма)

Это 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>

Выбрано и введено labEquipment и количество

<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>

Как добавить или ввести данные о количестве заимствованных инструментов через форму предоставления инструмента? И хранится в таблице «loan_lists» с именем «сумма». Как должен код, который я делаю в контроллере, модели и представлении?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 02 января 2019

Если я правильно понимаю, вам необходимо соотношение между многими из 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...