laravel, получение данных по идентификатору с помощью foreach

#laravel #foreach

#laravel #foreach

Вопрос:

как мне получить данные на основе insurance_id в сопутствующей базе данных? insurance_id зависит от другой таблицы, называемой «insurances», если это поможет. БД — это:

введите описание изображения здесь

и представление выглядит следующим образом:

введите описание изображения здесь

вот представление:

 <table class="table" id="companions_table">
<thead>
   <tr>
        <th>Name</th>
        <th>Date of Birth</th>
        <th>IC No</th>
        <th>Relationship</th>
    </tr>
</thead>

   <tbody>
      @foreach (old('companions', $companions->count() ? $companions : ['']) as $companion)
        <tr id="companion{{ $loop->index }}">
          <td>
                <input type="text" name="companion_name[]" id="companion_name[]" class="form-control" value="{{ old('companion_name', $companion->companion_name) }}" />
            </td>

            <td>
                <div class="input-group date" data-provide="datepicker" data-date-format="dd-mm-yyyy" data-date-today-highlight="true" data-date-end-date="0d">
                <input class="form-control" type="text" name="dob[]" id="dob[]" value="{{ old('dob', $companion->dob) }}">
                <div class="input-group-addon">
                <span class="fa fa-calendar"></span>
                </div>
                </div>
            </td>
            <td>
                <input type="text" name="ic[]" id="ic[]" class="form-control" value="{{ old('ic', $companion->ic) }}" />
                </td>
                <td>
                <input type="text" name="relationship[]" id="relationship[]" class="form-control" value="{{ old('relationship', $companion->relationship) }}" />
        </td>
        </tr>
      @endforeach
                <tr id="companion{{ count(old('companions', $companions->count() ? $companions : [''])) }}"></tr>
                    /tbody>
                    </table>
                
            <div class="row">
               <div class="col-md-12">
                <button id="add_row" class="btn btn-default pull-left">  Add Row</button>
                <button id='delete_row' class="pull-right btn btn-danger">- Delete Row</button>
            </div>
 

мой контроллер:

 public function edit(Insurance $insurance)
{
    abort_if(Gate::denies('insurance_edit'), Response::HTTP_FORBIDDEN, '403 Forbidden');

    $customers = CustomerProfile::all()->pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');

    $products = Product::all()->pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');

    $sales_2s = User::all()->pluck('name', 'id')->prepend(trans('global.pleaseSelect'), '');

    $companions = Companion::all();

    $insurance->load('customer', 'product', 'sales_2', 'team', 'companions');

    $approvers = Role::findOrFail(3)->users()->get();

    return view('admin.insurances.edit', compact('customers', 'products', 'sales_2s', 'insurance', 'approvers', 'companions'));
}
 

он продолжает извлекать все данные из таблицы, в основном игнорируя insurance_id . как мне это исправить?

Ответ №1:

Все компаньоны извлекаются, независимо от insurance_id , из-за следующей строки:

 $companions = Companion::all();
 

Если вам нужны только компаньоны с текущим insurance_id , самым быстрым способом было бы заменить ранее упомянутую строку на:

 $companions = Companion::where('insurance_id', $insurance->id)->get();
 

Это должно сработать, однако обычным способом обработки этой взаимосвязи в Laravel было бы добавление следующей функции в вашу Insurance модель:

 use AppModelsCompanion; // or wherever your model happens to be located

public function companions()
{
      return $this->hasMany(Companion::class);
}
 

И заменить строку, упомянутую в начале, на:

 $companions = $insurance->companions;
 

Комментарии:

1. однако, попробовав оба ваших решения, я получил сообщение об ошибке «Попытка получить свойство ‘companion_name’ не-объекта (0)». Я также попытался заменить код в представлении, ошибка изменилась на: «Свойство [имя_компании] не существует в этом экземпляре коллекции. (0)»

2. неважно, я не заметил, что $companions-> companion_name должно быть $companion-> companion_name . большое вам спасибо!