Объединить два одинаковых экземпляра класса в Laravel
У меня есть юзеры, допустим два:
$user_1 = User::find(1);
$user_2 = User::find(2);
Юзеры содержат кошельки, группы итд
public function purses()
{
return $this->hasMany(Purse::class);
}
public function groups()
{
return $this->hasMany(Group::class);
}
Допустим $user_1 имеет 3 кошелька, а $user_2 имеет 1 кошелек.
Аналогично группы и кошельки содержат категории, доходы, расходы итд
Как мне объединить их в одного $user_family который будет содержать 4 кошелька?
Я пытался сделать через ->push()
$user_family = $user_1;
$user_family->purses->push($user_2->purses);
В этом случае получаю действительно 4 кошелька, только 4-тый является коллекцией в которой лежит модель
Illuminate\Database\Eloquent\Collection {#4882 ▼ // app/Models/User.php:116
#items: array:4 [▼
0 => App\Models\Purse {#3955 ▶}
1 => App\Models\Purse {#3069 ▶}
2 => App\Models\Purse {#7998 ▶}
3 => Illuminate\Database\Eloquent\Collection {#10909 ▶}
]
#escapeWhenCastingToString: false
}
Этот способ мне не подходит, вызывает дополнительную обработку данных при выводе. Да и у пользователя не только кошельки и группы, порядка 10 разных связей.
Ответы (1 шт):
Автор решения: Serge Fenix
→ Ссылка
Можно сделать так
$user_family->purses->push(...$user_2->purses);
Или правильней сделать вот так.
$user_family = $user_1->purses->merge($user_2->purses);