1

私は2つのテーブル'category''items'. 各カテゴリから 5 つのアイテムを選択したいと思います。コードを試しましたが、うまくいきません。Laravelでどうすればできますか?

<?php

$items = DB::table('items')
    ->leftjoin('category', 'category.id', '=', 'items.categoryId')
    ->select('items.id', 'items.name', 'items.categoryId', 'category.categoryName')
    ->groupBy(items . categoryId)
    ->limit(5)
    ->get()
4

3 に答える 3

1

熱心な読み込み項目を試すことができますが、それに制限を適用する方法がわかりません。あなたの最善の策は、複数のクエリを使用することです。

class Category extends Model{
    ...
    public function items(){
        return $this->belongsToMany(App\Item::class);
    }
}
class Item extends Model{
...
}
$categories = Category::all();

$categoriesWithItems = $categories->map(function($category){
    return [
        'category' => $category,
        'items' => $category->items()->take(5)->get(),
    ];
}
于 2016-01-28T08:50:16.873 に答える
0

Laravel 5 カテゴリモデルでこの関係を追加します

public function items()
  {
    return $this->hasMany(Item::class,'category_id');
  }

アイテムモデルにこの関係を追加します

public function category()
  {
    return $this->belongsTo(Category::class);
  }

次に、コントローラーで次のように簡単に書くことができます

$categories = Category::all();
        return view('tasks.item', [
      'categories' => $categories
    ]);

ビューで、カテゴリを介して foreach ループを作成し、アイテムを 5 つまで使用して別の foreach ループを呼び出します

@foreach ($categories as $category)
                            <tr>
                                <!-- Task Name -->
                                <td class="table-text">
                                    <div>{{ $category->category_name }}</div>
                                </td>
                                <td>
                                    @foreach($category->items->take(5) as $item)
                                        {{ $item->name }}
                                    @endforeach
                                </td>
                            </tr>
                        @endforeach
于 2016-01-28T09:15:02.997 に答える
0

手作りのクエリの柔軟性を好む場合は、次のようにすることができます。

// Build and execute query
$sql = "
  SELECT *
  FROM products prod
  JOIN products_categories prodcat ON prodcat.product_id = prod.product_id
  WHERE (product_parent_id = 0 AND product_status = 'published')
  GROUP BY prod.category_id
";
Log::info('getProducts(): ', ['category_id' => $category_id, 'sql' => $sql, 'where' => $where]);
$result = DB::select($sql);

$resultオブジェクトの配列が含まれます

于 2016-01-28T09:00:08.280 に答える