Данные агруппы Laravel по idParent

#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;
    }
}