Идея такая:
У меня имеется три несвязанных между собой таблицы:
items (товары) - id, name
items_categories - id, item_id, category_id
categories (категории) - id, title
Код Items controller:
class ItemsController extends Controller
{
public function index() {
//$items = Items::all();
$items = DB::table('items')
->select('items.id','items.name','categories.title')
->join('items_categories', 'items.id', '=', 'items_categories.item_id')
->join('categories', 'items_categories.category_id', '=', 'categories.id')
->get();
return view('items.index', [
'items' => $items,
]);
}
Так вот в чем суть, один товар может иметь несколько категорий и я никак не могу вывести в таблицу так, чтобы товар не повторялся. Пока у меня сделано таким образом:
<table class="table table-striped table-bordered table-hover">
<tr>
<th>Название товара</th>
<th>Категория</th>
</tr>
@foreach($items as $item)
<tr>
<td>{{ $item->name }}</td>
<td>
{{ $item->title }}
</td>
</tr>
@endforeach
</table>
По идее во второй ячейке нужен еще один цикл, который будет еще строки создавать и выводит категории, но так и не получается. В дальнейшем мне требуется сделать еще и редактирование, удаление по этим таблицам
Я вам накидал простенький пример двух таблиц, с таблицей отношений. Старался использовать ваши имена таблиц, чтобы было янснее. Безусловно всей вашей структуры я не могу знать.
Category:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Category extends Model {}
Item
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model {}
ItemCategory (модель отношений)
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class ItemCategory extends Model
{
public function category()
{
return $this->belongsToMany(Category::class, 'item_categories', 'category_id');
}
public function item()
{
return $this->belongsToMany(Item::class, 'item_categories', 'item_id');
}
}
Как пользоваться:
$item = new ItemCategory();
$items = $item->with('category', 'item')->where(['item_id' => 1])->get();
foreach ($items as $item) {
$category = $item->category;
$item = $item->item;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости