Laravel eloquent, создать коллекцию на основе значения столбца - PullRequest
0 голосов
/ 03 марта 2020

У меня есть пример таблицы, подобной следующей:

| id | is_new | cate |
| 0  |   1    | [5]  |
| 1  |   1    | [5]  |
| 2  |   1    | [7]  |
| 3  |   1    | [6]  |

После вызова следующей функции

   $product = Products::where('is_new', 1)->get();

коллекция имеет следующую структуру данных

Collection {#1284 ▼
  #items: array:4 [▼
    0 => Products {#1285 ▶}
    1 => Products {#1286 ▶}
    2 => Products {#1287 ▶}
    3 => Products {#1288 ▶}
  ]
}

Я также могу вернуть список идентификаторов категорий через:

    $category = Category::where('type', 2)->pluck('id')->all();  

Интересно, есть ли какой-нибудь хороший способ достижения следующей структуры (или аналогичной) на основе cate? Я могу использовать метод грубой силы, чтобы создать его, циклически перебирая категорию $, затем добавляя в новую коллекцию вручную, я думаю, что есть лучший способ сделать это.

Collection {#1284 ▼
  #items: array:3 [▼
    5 => array:2 [▼
         0 => Products {#1285 ▶}
         1 => Products {#1286 ▶}
         ]
    6 => Products {#1287 ▶}    or  6 => array:1 [ 0 => Products {#1287 ▶} ]
    7 => Products {#1288 ▶}
  ]
}

Обновление решения на основе ответа:

$product->groupBy(function($item) {
        return $item['cate'][0]; //because the entry is a list
    });

1 Ответ

2 голосов
/ 03 марта 2020

Вам следует взглянуть на использование чего-то вроде groupBy для группировки ваших категорий. Это можно сделать на уровне базы данных (при условии, что у вас есть ссылочная целостность ) с внешними ключами. Вы также получите гарантию того, что возвращается массив для каждой категории, что сделает вещи более согласованными (тогда вам не нужно проверять, является ли это массив или экземпляр Products) .

Вам может потребоваться изменить структуру базы данных, если ваши категории хранятся в виде массивов, но для этого вам следует использовать промежуточную таблицу - посмотрите на отношения многие ко многим .

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