Laravel - внешний ключ, добавляющий массив данных в базу данных, а не просто идентификатор - PullRequest
1 голос
/ 04 марта 2020

У меня есть столик для поездок и упаковочный столик. Я создал отношения между двумя таблицами.

Пользователи могут создавать упаковочные листы для своих поездок, добавлять предметы и отмечать их галочками по завершении.

Внешний ключ для таблицы «Упаковка» - это trip_id. Однако, когда пользователь добавляет элемент в список упаковки, появляется сообщение об ошибке SQLSTATE [22007]: недопустимый формат даты и времени: 1366 Неверное целочисленное значение:

Похоже, что поле trip_id добавляет каждое поле из таблицы поездок. Я только хочу добавить идентификатор поездки, '17' в этом примере ниже ... enter image description here

маршруты

Route::get('/packingList/{id}', 'TaskController@index');
Route::post('/packingList/store', 'TaskController@store')->name('tasks.store');
Route::post('/packingList/update/{id}', 'TaskController@update')->name('tasks.update');
Route::delete('/packingList/{id}', 'TaskController@destroy')->name('tasks.destroy');

упаковкаList.blade. php

<div class="card-body">
    <form method="POST" action="{{route('tasks.store')}}">
      @csrf
      <input value="{{ $trip_id }}" name="trip_id" hidden="true"/>
      <div class="form-group">
        <label for "title">Title</label>
        <input id="title" name="title" type="text" maxlength="225" class="form-control" autocomplete="off" />
      </div>
      <button type="submit" class="btn btn-primary">Create</button>
    </form>
  </div>
<div class="card-header">Items to Pack</div>

  <div class="card-body">
    <table class="table table-striped">
      @foreach ($packings as $packing)
      <tr>
        <td>
          @if($packing->is_complete)
            <s> {{$packing->title}} </s>
          @else
            {{$packing->title}}
          @endif
        </td>
        <td class="text-right">
          @if(! $packing->is_complete)
            <form method="POST" action="{{route('tasks.update', $packing->id)}}">
              @csrf
              <button type="submit" class="btn btn-primary">Complete</button>
            </form>
          @endif
          <form action="{{route('tasks.destroy',[$packing->id])}}" method="POST">
            @method('DELETE')
            @csrf
            <button class="btn btn-danger">Delete</button>
          </form>
        </td>
      </tr>
    @endforeach
  </table>

</div>

Контроллер

public function index($id) {
    $trip_id = Trip::findOrFail($id);
    $packings = Packing::get();

    return view('packingList')->with('packings', $packings)->with('trip_id', $trip_id);
}

public function store(Request $request) {
  //validate given Request
  $this->validate($request, [
    'title' => 'required|string|max:225',
    'trip_id' => 'required'
  ]);

  //create a new incompletete item with given title
  $packings = new Packing;
  $packings->title = $request->input('title');
  $packings->is_complete = false;
  $packings->trip_id = $request['trip_id'];
  $packings->save();

  return redirect('packingList')->with('success', 'Item added to Packing List');
}

public function update(Request $request, $id) {
  //mark task as complete and save it
  $packings = Packing::find($id);
  $packings->is_complete = true;
  $packings->save();

  return redirect('packingList')->with('success', 'Item  Updated');
}

public function destroy($id)
{
  $packings = Packing::find($id);
  $packings->delete();
  return redirect('trips')->with('success', 'Item Deleted from Packing List');
}

модели

public function trip()
{
    return $this->belongsTo('App\Trip', 'trip_id');
}

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

1 Ответ

0 голосов
/ 04 марта 2020

Модифицируйте свой контроллер:

public function store(Request $request) {
  //validate given Request
  $this->validate($request, [
    'title' => 'required|string|max:225',
    'trip_id' => 'required|numeric' //we want it to be number
  ]);

  //create a new incompletete item with given title
  $packings = new Packing;
  $packings->title = $request->input('title');
  $packings->is_complete = false;
  $packings->trip_id = $request['trip_id'];
  $packings->save();

  return redirect('packingList')->with('success', 'Item added to Packing List');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...