#php #laravel #eloquent #laravel-8 #eloquent-relationship
Вопрос:
У меня есть три таблицы: продукты, категории и category_product.
На странице формы редактирования я отображаю значения категорий и подкатегорий в поле выбора. Выбранные параметры категории сохраняются в сводной таблице category_product. В этой таблице есть product_id и category_id.
Вот мой код.
Модель продукта
public function category() {
return $this->belongsToMany('AppModelsCategory');
}
Категория модель:
public function products()
{
return $this->belongsToMany(Product::class);
}
изменить вид страницы продукта:
<select name="category_id[]" class="form-control" multiple size = 10>
@foreach ($parentCategories as $parentCategory)
<option value="{{ $parentCategory->id }}">{{ $parentCategory->name }}</option>
@if(count($parentCategory->subcategory))
@include('includes.subcats-select',['subcategories' => $parentCategory->subcategory])
@endif
@endforeach
</select>
подкаты-выберите просмотр
@foreach($subcategories as $subcategory)
<option value="{{ $subcategory->id }}">---{{ $subcategory->name }}</option>
@if(count($subcategory->subcategory))
@include('includes.subcats-select',['subcategories' => $subcategory->subcategory])
@endif
</div>
@endforeach
Как я могу добавить атрибут «выбранный» в параметры выбранной категории, чтобы при редактировании страницы правильно применить изменения?
Ответ №1:
Столбцы сводной таблицы можно получить следующим образом:
Модель продукта
public function category() {
return $this->belongsToMany('AppModelsCategory')->withPivot('selected');
}
изменить вид страницы продукта:
<select name="category_id[]" class="form-control" multiple size = 10>
@foreach ($parentCategories as $parentCategory)
<option value="{{ $parentCategory->id }}" selected="{{ $parentCategory->pivot->selected }}">
{{ $parentCategory->name }}
</option>
@if(count($parentCategory->subcategory))
@include('includes.subcats-select',['subcategories' => $parentCategory->subcategory])
@endif
@endforeach
</select>
РЕДАКТИРОВАТЬ: Хотя приведенный выше ответ может быть полезен для других, он не отвечает на вопрос. Итак, вот моя вторая попытка после некоторых разъяснений в чате.
<select name="category_id[]" class="form-control" multiple size = 10>
@foreach ($parentCategories as $parentCategory)
<option value="{{ $parentCategory->id }}"{{ $product->category->contains($parentCategory->id) ? 'selected' : '' }}>
{{ $parentCategory->name }}
</option>
@if(count($parentCategory->subcategory))
@include('includes.subcats-select',['subcategories' => $parentCategory->subcategory])
@endif
@endforeach
</select>
Комментарии:
1. Я обновил модель продукта и попытался использовать ваш код, но я получаю эту ошибку: пытаюсь получить свойство «выбрано» не-объекта.
2. Так
$parentCategory
и есть$product->category
?3. с dd($Родительские категории) Я получаю результат, но с dd($product-категория) Я получаю SQLSTATE[42S22]: Столбец не найден: 1054 Неизвестный столбец «category_product.selected» в «списке полей»
4. если я удалю ->withPivot («выбранный») из модели, dd($product->>категория) будет работать нормально
5. selected=»{{ $ParentCategory->pivot->>selected }}» выдает экран ошибки При попытке получить свойство «выбрано» не-объекта