#php #laravel
Вопрос:
Я использую laravel для создания api, и теперь мне нужна помощь в группировании записей в моих табличных компаниях.
Я использую этот код, чтобы получить данные:
Company::orderBy('created_at')
->get();
И этот результат эти данные:
id | idParent | companyName
1 | null | Company A
2 | 1 | Company B
3 | null | Company C
4 | 3 | Company D
5 | 1 | Company E
6 | 3 | Company F
Как я могу получить группу данных по idParent, как это:
id | idParent | companyName
1 | null | Company A
2 | 1 | Company B
5 | 1 | Company E
3 | null | Company C
4 | 3 | Company D
6 | 3 | Company F
Любая помощь будет приветствоваться.
Спасибо!!
Комментарии:
1. У вас есть метод взаимоотношений на месте ? Что вы пробовали ?
2. Спасибо за ответ.. Я храню в одной таблице компании и филиалы. Я оставляю idParent нулевым, когда компании, и помещаю идентификатор материнской компании в idParent, когда филиал. И теперь мне нужно упорядочить эти данные, как во втором примере, компания с идентификатором = 1-это компания, идентификатор компании = 2, а 5-филиал компании с идентификатором = 1. Компания с идентификатором = 3-это компания, идентификатор компании=4, а 6 — филиал компании с идентификатором = 3.
3. все это было ясно из вашего вопроса. В вашей
Company::class
модели вы декларировали отношения между материнской компанией и дочерней компанией ? Кроме того, добавьте код, который вы пробовали, и проблемы, с которыми вы столкнулись.4. На самом деле, я не хочу, чтобы филиалы включались в массив внутри компаний. Я бы хотел, чтобы это был единый массив со всеми компаниями, упорядоченными, как я уже упоминал.
5. Можно ли определить взаимосвязь и записи, которые должны быть включены в один и тот же массив?
Ответ №1:
В качестве желаемого результата вы можете использовать не группировку по, а сортировку по, вы можете использовать:
return Company::orderBy('idParent')
Комментарии:
1. Rateb спасибо за ваш ответ.. Это решение поставит сначала idParent null, после idParent = 1 и после idParent = 3. Мне нужен заказ по idParent, как второй пример
Ответ №2:
Я решаю эту проблему, как показано ниже:
$companies = Company::where('idParent', null)
->orderBy('created_at')
->get();
$newCompanies = array();
foreach ($companies as $key => $value) {
$newCompanies[] = $value;
foreach (Company::where('idParent', $value->id)->orderBy('created_at')->get() as $key => $value) {
$newCompanies[] = $value;
}
}