2016-01-08 4 views
0

У меня есть к моделям и они сгруппированы по месяцам:Объединить две модели, сгруппированных по месяцам

$cars= $company->car->groupBy(function($item) 
{ 
    return Carbon::parse($item->created_at)->format('M'); 
}); 

$boats= $company->boat->groupBy(function($item) 
{ 
    return Carbon::parse($item->created_at)->format('M'); 
}); 

Таким образом я получил две коллекции

Collection {#841 ▼ 
    #items: array:3 [▼ 
    "Jan" => Collection {#848 ▼ 
     #items: array:1 [▼ 
     0 => Cars {#859 ▶} 
     ] 
    } 
    "Fab" => Collection {#852 ▶} 
    "Mar" => Collection {#853 ▶} 
    ] 
} 

И тот же один для лодки, на мой вопрос как слить их, чтобы получить что-то вроде:

Collection {#841 ▼ 
    #items: array:3 [▼ 
    "Jan" => Collection {#848 ▼ 
     #items: array:1 [▼ 
     0 => Cars {#859 ▶} 
     1 => Boats {#860 ▶} 
     ] 
    } 
    "Fab" => Collection {#852 ▶} 
    "Mar" => Collection {#853 ▶} 
    ] 
} 

ответ

1

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

Следующий код должен сделать трюк:

$result = $company->car->merge($company->boat)->groupBy(function($item) { 
    return Carbon::parse($item->created_at)->format('M'); 
}); 
+0

Привет, Спасибо за помощь, но это не работает, я подъемы просто коллекция лодок там ... – DokiCRO

+0

Я обновил ответ, пожалуйста, попробуйте сейчас –

+0

Nope:/То же самое – DokiCRO

0

Вот как я это сделал:

$collection= $company->car; 
$company->boat->each(function ($item) use ($collection) { 
    $collection->add($item); 
}); 
Смежные вопросы