#php #laravel #pivot
#php #laravel #сводная
Вопрос:
У меня есть связь «многие ко многим» со сводной таблицей. Две модели взаимосвязи — это сообщества и персонажи. В сводной таблице у меня есть идентификаторы экземпляров в отношениях и дополнительное поле с именем «member_count» для подсчета количества членов в этом конкретном отношении. Чтобы получить доступ к полю подсчета участников, я включаю следующую функцию в свою модель сообщества, чтобы она всегда возвращалась:
public function personas()
{
return $this->belongsToMany('AppPersona')->withPivot('member_count');
}
В результате при извлечении сообществ возвращается следующее:
{
"id": "3304806f-9172-4690-b9b7-fa672319eaef",
"name": "Some Community",
"site_id": "ee09da48-9ba6-42a9-9f72-4d3ca06ffd2f",
"internal_external": "internal",
"created_at": "2020-09-11T14:36:23.000000Z",
"updated_at": "2020-09-11T14:36:23.000000Z",
"personas": [
{
"id": "1447bc79-f54e-49eb-b33d-acc1c43633e5",
"name": "Some Persona",
"created_at": "2020-09-11T14:41:27.000000Z",
"updated_at": "2020-09-11T14:41:27.000000Z",
"pivot": {
"community_id": "3304806f-9172-4690-b9b7-fa672319eaef",
"persona_id": "1447bc79-f54e-49eb-b33d-acc1c43633e5",
"member_count": 10
}
},
{
"id": "ca53ec58-a4e8-4330-a5c3-8dea2235b01f",
"name": "Another Persona",
"created_at": "2020-09-11T14:41:15.000000Z",
"updated_at": "2020-09-11T14:41:15.000000Z",
"pivot": {
"community_id": "3304806f-9172-4690-b9b7-fa672319eaef",
"persona_id": "ca53ec58-a4e8-4330-a5c3-8dea2235b01f",
"member_count": 5
}
}
]
},
Я хочу переместить поле member_count на один уровень выше, чтобы оно просто возвращалось как часть объекта Persona. Есть ли способ сделать это встроенным в Laravel?
Комментарии:
1. вы можете сделать это с помощью пользовательского запроса к БД. Я не думаю, что есть способ сделать это напрямую с помощью Eloquent
Ответ №1:
думаю, вы можете сделать addSelect внутри вашей нетерпеливой загрузки….
$value = Community::where('id', 1)->with(['personas'=> function ($query) {
$query->join('communities_personas', 'personas.id', 'communities_personas.personas_id')->
addSelect(['communities_personas.member_count,communities_personas.personas_id']);
}])->get();
я не уверен в названии ваших таблиц и моделей, пожалуйста, исправьте неправильные…
и убедитесь, что вы также добавляете выбор внешнего ключа между таблицей personas и сводной таблицей.