Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.02.2017 00:35:01

Как реализовать данный запрос

На въюхе у меня должно быть два цикла: один выводит все категории, второй, который находится внутри первого, выводит все бренды данной категории. Пример:

    //model
            $categories = DB::table('products')
                    ->join('categories', 'products.c_id', '=', 'categories.id')
                    ->select('categories.name as cat')
                    ->groupBy('categories.name')
                    ->get();
            $brands = DB::table('products')
                    ->join('categories', 'products.c_id', '=', 'categories.id')
                    ->join('brands', 'products.b_id', '=', 'brands.id')
                    ->select('brands.name as brand')
                    ->where('categories.id', '=', '1')<-- об этом речь пойдёт ниже
                    ->groupBy('brands.name')
                    ->get();
    
    //view
    
                    @foreach($categories as $category)
                    <li><a>{{ $category->cat }}</a>
                        <ul class="sort-section">
                            <li><a href="#"><strong>All CPUs</strong></a></li>
                            @foreach($brands as $brand)
                            <li><a href="#">{{ $brand->brand }}</a></li>
                            @endforeach
                        </ul>
                    </li>
                    @endforeach

Проблема заключается в выделенной мною строчкой в модели. Я "выбираю" записи, где `id` категории = 1(проверял или всё остальное работает), когда на самом деле мне нужно выбирать `id` поточной категории(поточной на въюхе). Другими словами, если бы я это делал по-простому и по-неправильному, то я бы второй запрос осуществлял бы внутри первого `foreach` на въюхе. Каким образом можно решить данный вопрос?

Не в сети

#2 03.02.2017 01:53:53

Re: Как реализовать данный запрос

Всем спасибо, уже работает:

$getAll = DB::table('categories')
                    ->leftJoin('products', 'products.c_id', '=', 'categories.id')
                    ->leftJoin('brands', 'brands.id', '=', 'products.b_id')
                    ->groupBy('brands.name')
                    ->groupBy('categories.name')
                    ->get([
                        'categories.id as id',
                        'categories.name as cat',
                        'brands.name as brand'
                    ]);

        $categories = [];
        if (count($getAll)) {
            foreach ($getAll as $single) {
                if (!isset($categories[$single->id])) {
                    $categories[$single->id] = new \StdClass();
                }
                $categories[$single->id]->cat = $single->cat;
                $categories[$single->id]->brands[] = $single->brand;
            }
        }
//View

@foreach($categories as $category)
 <li><a>{{ $category->cat}}</a>
   <ul class="sort-section">
     <li><a href="#"><strong>All {{$category->cat}}</strong></a></li>
     @foreach($category->brands as $brand)
        <li><a href="#">{{ $brand }}</a></li>
     @endforeach
   </ul>
 </li>
@endforeach

Не в сети

#3 03.02.2017 06:35:48

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Как реализовать данный запрос

Зачем так извращаться? Почему бы не пойти по пути "The laravel way" ?

Не в сети

#4 03.02.2017 16:01:21

Re: Как реализовать данный запрос

что имеется в виду?

Не в сети

#5 04.02.2017 10:27:18

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Как реализовать данный запрос

laravelNewbie пишет:

что имеется в виду?

$categories = Category::with('products', 'brands')->get(['id',' 'name']};

Не в сети

Подвал раздела