Laravel - группа По предметам, которые имеют одну категорию - PullRequest
0 голосов
/ 24 июня 2018

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

модель товара:

 class Item extends Model
{
 protected $table="items";
protected $fillable= 
['item_title','category_id','item_price','item_details','item_image'];
protected $primaryKey='item_id';
public $timestamps=false;

public function categories()
{
$this->hasOne('App\category','category_id','category_id');
}
}

категория модели

class Category extends Model
{
protected $table="categories";
protected $fillable=['category_name'];
protected $primaryKey='category_id';
public $timestamps=false;

  public function items()
  {
    $this->hasMany('App\items','category_id','category_id');
  }
  }

Контроллер

class HomeController extends Controller
{
public function getItems()
{
$items = Item::groupBy('category_id')->get();   
return view('home',compact('items'));
}
}

HTML

 @foreach($items as $indexKey => $item)
<div class="MenuPage_contentArea">
<div class="Category_root" id="one">
<div class="Category_categoryHeader">

<div><h2 class="Category_name">{{$item->item_category}}</h2></div>
<div class="Category_description"></div>
</div>

  <div class="Category_itemsContainer">
  <div class="Category_itemContainer">
  <button class="Item_root Button_root">
  <div class="Item_image" style="background-image: url('{{ asset('images/' . $item->item_image) }}');"></div>

<div class="Item_itemContent">
<div class="Item_topSection">
<span class="Item_name">{{$item->item_title}}</span>

<span class="Item_price">${{$item->item_price}}</span></div>
<div class="Item_description">{{$item->item_details}}</div>
</div>
</button>
</div>
</div>
</div>
</div>
@endforeach

Ответы [ 5 ]

0 голосов
/ 24 июня 2018

это решение

public function getItems()
 {
 $items = Item::all()->groupBy('category_id');   
    return view('home',compact('items'));
  }

 @foreach($items as $category_id => $categoryItems)
  {{ $category_id }}
 @foreach($categoryItems as $item)
 <!-- Item Details-->
  @endforeach
 @endforeach
0 голосов
/ 24 июня 2018

Показать все элементы для каждой категории: я рассматриваю категории как вашу таблицу с category_id в качестве первичного ключа и элементы как таблицу с category_id в качестве внешнего ключа.

class Category extends Model
{
   public function items()
   {
    $this->hasMany('App\items','category_id','category_id');
   }
}





class HomeController extends Controller
{
   public function getCategories()
   {
    $categories = Category::with('items')->get();   
    return view('home',compact('items'));
   }
}
0 голосов
/ 24 июня 2018

Я думаю, что вы не определяете обратное отношение отношения один ко многим

public function categories()
{
   $this->hasMany('App\Items');
}
0 голосов
/ 24 июня 2018

Вы должны использовать groupBy в коллекции.

class HomeController extends Controller
{
    public function getItems()
    {
        $items = Item::get()->groupBy('category_id');   

        return view('home', compact('items'));
    }
}
0 голосов
/ 24 июня 2018

Я думаю, что вы ищете это

$categories::with('items')->get()

Это даст вам все категории с их элементами, при условии, что обратное соотношение определено как items()

Вы можетезатем получить доступ к элементу и категории с помощью.Поскольку вы получаете предметы через категорию, они будут «сгруппированы».

@foreach($categories as $category)
    @foreach($category->items as $item)

    @endforeach
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...