Laravel - как передать внешний ключ без выбора пользователем - PullRequest
2 голосов
/ 21 февраля 2020

У меня есть две таблицы базы данных, Поездки и События. Я создал отношения между ними в Laravel. В одной поездке может быть много событий.

Я создал кнопку «Добавить событие», которая выводит пользователя в форму. Однако в минуту, чтобы передать внешний ключ 'trip_id' при добавлении события, я создал выпадающий список.

Я хочу удалить это и автоматически выбрать 'trip_id' в фоновом режиме, чтобы пользователю не нужно.

editTrip.blade. php

<a href="/trips/{id}/edit/AddEvent" class="btn btn-success"> Add Event</a>

<table class="table table-striped table-bordered table-hover">
    <thead class="thead">
        <tr class="warning">
            <th>Category</th>
            <th>Event Name</th>
            <th>Start Date</th>
            <th>End Date</th>
            <th>Time</th>
            <th>Address</th>
            <th>Notes</th>
            <th>Edit</th>
            <th>Delete</th>
        </tr>
    </thead>
    <tbody>
    @foreach($trip->events as $event)
        <tr>
            <td> </td>
            <td>{{ $event->event_name }}</td>
            <td>{{ $event->start_date }}</td>
            <td>{{ $event->end_date }}</td>
            <td> </td>
            <td> </td>
            <td> </td>
            <th>
            <a href="/events/{{$event->id}}/editEventForm" class="btn btn-primary" role="button" aria-pressed="true">Edit</a>
          </th>
        <th>
        <form action="{{route('events.destroy',[$event->id])}}" method="POST">
          @method('DELETE')
          @csrf
          <button class="btn btn-danger">Delete</button>
        </form>
      </th>
        </tr>
    @endforeach
    </tbody>
</table>

<br />
<hr>


<div class="panel panel-primary">
  <div class="panel-heading"></div>
  <div class="panel-body">
    <br>
    {!! $calendar_details->calendar() !!}
    {!! $calendar_details->script() !!}
  </div>
</div>

addEvent.blade. php

{!! Form::open(array('route' => 'events.add', 'method'=>'POST', 'files'=>'true')) !!}

  <div class="form-group">
    @if (Session::has('sucess'))
      <div class="alert alert-sucess">{{ Session::get('sucess') }}</div>
    @elseif (Session::has('warning'))
      <div class="alert alert-danger">{{ Session::get('warning') }}</div>
      @endif
    </div>

    <div class="form-group">
    <div class="form-group">
        {!! Form::label('trip_id', 'Destination:') !!}
        <select class="form-control" name="trip_id">
          @foreach($trips as $trip)
            <option value='{{ $trip->id}}'>{{$trip->destination}}</option>
          @endforeach
        </select>
      </div>
    </div>

<div class="form-group">
  <div class="form-group">
    {!! Form::label('event_name', 'Add Event:') !!}
    <div class="">
      {!! Form::text('event_name', null, ['class' => 'form-control']) !!}
      {!! $errors->first('event_name', '<p class="alert alert-danger">:message</p>') !!}
    </div>
  </div>
</div>

<div class="form-group">
  <div class="form-group">
    {!! Form::label('start_date', 'Start Date:') !!}
    <div class="">
      {!! Form::date('start_date', null, ['class' => 'form-control']) !!}
      {!! $errors->first('start_date', '<p class="alert alert-danger">:message</p>') !!}
    </div>
  </div>
</div>


<div class="form-group">
  <div class="form-group">
    {!! Form::label('end_date', 'End Date:') !!}
    <div class="">
      {!! Form::date('end_date', null, ['class' => 'form-control']) !!}
      {!! $errors->first('end_date', '<p class="alert alert-danger">:message</p>') !!}
    </div>
  </div>
</div>

<div class="form-group" &nbsp;<br/>
{!! Form::submit('Add Event', ['class' => 'btn btn-primary']) !!}

{!! Form :: close () !!}

EventController. php

public function addEvent(Request $request)
{
  $validator = Validator::make($request->all(),[
    'event_name' => 'required',
    'start_date' => 'required',
    'end_date' => 'required',
    'trip_id'=> 'required',
  ]);

  if($validator->fails()) {
    \Session::flash('warning', 'Please enter the valid details');
    return redirect('/events')->with('input', Input::all());
  }

  $events = new Events;
  $trips = Trip::all();
  $events->event_name = $request['event_name'];
  $events->start_date = $request['start_date'];
  $events->end_date = $request['end_date'];
  $events->trip_id = $request['trip_id'];
  $events->save();

return redirect('trips')->with('success', 'The new event has been added to your trip')->with('trips', $trips);
}

public function display()
{
  $trips = Trip::all();
  $user_id = Auth::id();
  $user = User::find($user_id)->trips()->paginate(10);

  return view('/addEvent')->with('trips', $user);
}

web. php

Route::get('/trips/{id}/edit/AddEvent', 'EventController@display')->name('events.display');
Route::post('/addEvents', 'EventController@addEvent')->name('events.add');
Route::get('/trips/{id}/edit', 'TripController@edit')->name('trips.edit');

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

В вашем addEvent.blade вы можете удалить выбор и добавить скрытый ввод:

<input value="{{ $trip_id }}" name="trip_id" hidden="true"/>

Затем вам придется вернуть идентификатор поездки из вашего контроллера.

Но сначала вы должны исправить URL ссылки в editTrip.blade , чтобы передать правильное значение:

<a href="/trips/{{$trip->id}}/edit/AddEvent" class="btn btn-success">Add Event</a>

И так как у вас будет идентификатор поездки как параметр маршрута {id}:

Route::get('/trips/{id}/edit/AddEvent', 'EventController@display')->name('events.display');

Вы можете получить его в аргументе функции и вернуть его в виде:

public function display($id)
{
  return view('/addEvent')->with('trip_id', $id);
}
1 голос
/ 22 февраля 2020

Используйте скрытую форму.

<input name="trip-id" value="{{ $trip->id }}" hidden />

Тогда получите ее из запроса

$trips->trip_id = $request->trip_id;

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...