У меня есть две таблицы, users
и like_categories
, которые имеют отношение many-to-many
. pivot table
называется like_category_user
. После вставки данных двух пользователей в db
, вот мой pivot table
выглядит так: https://i.imgur.com/MeeRbiV.png
Я хочу посчитать amount
для каждого из различных, например category
для каждого user
и сохраните его в object array
следующим образом:
[
{
"User Id": 1,
"Like Categories": [
{
"Category": "Chinese Restaurant"
"Amount": 1
},
{
"Category": "Korean Restaurant"
"Amount": 2
},
{
"Category": "Fast Food Restaurant"
"Amount": 3
},
{
"Category": "Italian Restaurant"
"Amount": 1
},
{
"Category": "Steakhouse Restaurant"
"Amount": 3
}
]
},
{
"User Id": 2,
"Like Categories": [
{
"Category": "Thai Restaurant"
"Amount": 1
},
{
"Category": "Kebab Shop"
"Amount": 3
},
{
"Category": "Pizza Place"
"Amount": 2
},
{
"Category": "Steakhouse"
"Amount": 1
}
}
}
]
Я попытался сохранить данные из БД в массив объектов на основе вышеуказанного формата. Но вывод не так, как я хотел. Мой код:
public function showUserLikesData() {
$users = User::all();
$counter = 0;
$countUser = 0;
$countThatCategory = 0;
$categoryName = '';
foreach($users as $user) {
$userLikesData[$countUser]['User Id'] = $user->id;
foreach ($user->likeCategories as $likeCategory) {
$categoryName = $likeCategory->pivot->category_name;
foreach ($user->likeCategories as $likeCategory) {
$checkCategoryName = $likeCategory->pivot->category_name;
if ($categoryName == $checkCategoryName) {
$countThatCategory++;
}
}
$userLikesData[$countUser]['Like Categories'][$counter]['Category'] = $categoryName;
$userLikesData[$countUser]['Like Categories'][$counter]['Amount'] = $countThatCategory;
$countThatCategory = 0;
$counter++;
}
$countUser++;
$counter=0;
}
return $userLikesData;
}
object array
Я получаю:
[
{
"User Id": 1,
"Like Categories": [
{
"Category": "Chinese Restaurant",
"Amount": 1
},
{
"Category": "Korean Restaurant",
"Amount": 2
},
{
"Category": "Korean Restaurant",
"Amount": 2
},
{
"Category": "Fast Food Restaurant",
"Amount": 3
},
{
"Category": "Fast Food Restaurant",
"Amount": 3
},
{
"Category": "Fast Food Restaurant",
"Amount": 3
},
{
"Category": "Italian Restaurant",
"Amount": 1
},
{
"Category": "Steakhouse",
"Amount": 3
},
{
"Category": "Steakhouse",
"Amount": 3
},
{
"Category": "Steakhouse",
"Amount": 3
}
]
},
{
"User Id": 2,
"Like Categories": [
{
"Category": "Thai Restaurant",
"Amount": 1
},
{
"Category": "Kebab Shop",
"Amount": 3
},
{
"Category": "Kebab Shop",
"Amount": 3
},
{
"Category": "Kebab Shop",
"Amount": 3
},
{
"Category": "Pizza Place",
"Amount": 2
},
{
"Category": "Pizza Place",
"Amount": 2
},
{
"Category": "Steakhouse",
"Amount": 1
}
]
}
]