Laravel 5.4 хранит отношения «многие ко многим» в базе - PullRequest
0 голосов
/ 15 октября 2018

У меня есть 2 модели

  • ImageRequest
  • RequestType

1 ImageRequest может иметь много RequestTypes, а 1 RequestType может иметь много ImageRequests.

Я перевел это так в моих моделях:

Модель ImageRequest:

/**
 * Get the Request Types for an image request.
 */
public function requestTypes()
{
    return $this->hasMany('App\RequestType');
}

Модель запроса:

/**
 * Get the Image Requests for a Request Type.
 */
public function imageRequests()
{
    return $this->hasMany('App\ImageRequest');
}

Моя миграция для таблицы image_requests:

$table->unsignedInteger('request_type_id')->nullable();
$table->foreign('request_type_id')->references('id')->on('request_types');

В моей форме у меня есть несколько флажков, чтобы выбрать RequestTypes при создании нового ImageRequest, например:

@foreach($requestTypes as $requestType)
    {{ Form::checkbox('request_type_id', $requestType->id) }}
    {{ Form::label($requestType->type, $requestType->type) }}
    <br>
@endforeach

У меня есть функция в моем сервисе для хранения ImageRequest, который выглядит какthis:

public function storeImageRequest(StoreImageRequestRequest $request)
{
    return Auth::user()->imageRequests()->save(new ImageRequest($request->all()));
}

Это прекрасно работает, но хранит только последний выбранный "request_type_id".Он не может хранить все идентификаторы request_type_id.

Как сохранить несколько идентификаторов request_type_id?

1 Ответ

0 голосов
/ 15 октября 2018

Вы установили свое отношение как один ко многим, прочитайте документы для многих ко многим.Это включает в себя сводную таблицу для хранения отношений.

Если вы правильно настроили сводную таблицу и отношения, вы можете синхронизировать типы запросов в ImageRequest.

Также обновите HTML-код, чтобы разместить массив со всеми идентификаторами типов запросов.Затем синхронизируйте все типы с изображениями.

@foreach($requestTypes as $requestType)
    {{ Form::checkbox('request_type_ids[]', $requestType->id) }}
    {{ Form::label($requestType->type, $requestType->type) }}
    <br>
@endforeach

<?php

$imageRequest = Auth::user()->imageRequests()->save(new ImageRequest($request->all()));
$imageRequest->requestTypes()->sync($request->get('request_type_ids'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...