Получение данных в ответ, но после рендеринга представления через ajax, не получая немного данных
Laravel: 5.7.25
PHP 7.2.10
Пример данных в ответ
{,…}
data: [{id: 1,…}, {id: 2,…}, {id: 3,…}, {id: 4,…}, {id: 5,…}, {id: 6,…}, {id: 7,…}, {id: 8,…}, {id: 9,…},…]
0: {id: 1,…}
carModelBodyType: {id: 1, name: "Sedan", status: 1, created_at: "2019-01-03 13:25:46", updated_at: "2019-01-03 13:25:46"}
id: 1
insuranceProvider: {id: 1, name: "The Oriental Insurance Company Ltd", has_logo: null, recommended_partner: 1,…}
base_commission_amount: 0
base_commission_percentage: 10
bonus_amount: 0
bonus_percentage: 2
has_logo: null
id: 1
name: "The Oriental Insurance Company Ltd"
planBenifits: [,…]
0: {id: 83, insurance_providers_id: 1, year: 2019, effective_date: "2019-01-27 00:00:00", plan_type: 0,…}
1: {id: 84, insurance_providers_id: 1, year: 2019, effective_date: "2019-01-27 00:00:00", plan_type: 0,…}
2: {id: 85, insurance_providers_id: 1, year: 2019, effective_date: "2019-01-27 00:00:00", plan_type: 0,…}
Ввиду
@foreach ( $car_premium_details as $car_premium_detail )
{{ var_dump($car_premium_detail->insuranceProvider->name) }} //Getting correctly
{{ var_dump($car_premium_detail->insuranceProvider->planBenifits) }} //Getting null
@endforeach
Представление визуализируется через AJAX, используя view()->render()
функция.
3 ответа
Я удалил ресурс, создал еще несколько связей и теперь использую их для получения данных.
что-то вроде $car_premium_detail->insuranceProvider->planBenifits
сейчас CarPremium
- InsuranceProvider
отношения, InsuranceProvider
- PlanBenifit
отношения и InsuranceProvider
- BenefitMaster
отношения.
Я использовал все связи в ресурсе и данные в представлениях, теперь я использую все отношения в представлениях и только отправляю CarPremium
красноречивая коллекция для просмотра. если есть лучший способ, пожалуйста, дайте мне знать.
Да, мне понравилось бы уже отформатированные данные вместо того, что я делаю.
Ресурсы API на самом деле не предназначены для передачи в представление, они предназначены для использования в ответах JSON, где они сериализуются в JSON.
Если вы передадите объект коллекции в представление, сериализация не будет выполнена, поэтому он все равно будет классом сбора ресурсов.
Вы можете сериализовать его в массив самостоятельно, вызвав $car_premium_details->toArray(null)
(первый параметр должен быть объектом запроса, но вы можете передать значение null).
Тогда вам придется обращаться к этому как к массиву, а не как к объекту.
Тем не менее, я по-прежнему не рекомендую пытаться использовать ресурсы API по вашему мнению, если у вас нет реальной причины для этого. В большинстве случаев передача оригинальной модели должна быть достаточной и намного более легкой для манипулирования.
вы можете использовать разрешение();
пример:
Мой ресурс:
public function toArray($request): array
{
return [
'id' => $this->id,
'is_active' => $this->is_active,
'name' => $this->name,
'sort' => $this->sort,
'branch_language_instruction_id' => $this->branch_language_instruction_id,
'address' => $this->address,
'address_second' => $this->address_second,
'stop_message' => $this->stop_message,
'city' => $this->city,
'state_province' => $this->state_province,
'postal_code' => $this->postal_code,
'time_zone_lookup_id' => $this->time_zone_lookup_id,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'deleted_at' => $this->deleted_at,
'branch_language_id' => $this->branch_language_id,
'branch_name' => (string) $this->languageTextName->translation->content ??'not found',
];
}
в контроллере:
$branches = collect(BranchResource::collection(Branch::get())->resolve());
return view('superAdmin.branches.branch_permission', compact('branches' ));
Ввиду:
<select class="form-select" id="inputGroupSelectBranch">
@foreach($branches as $branch)
<option value="1" selected="">Choose...</option>
<option class="select-branch"
value="{{$branch['id']}}">{{ $branch['branch_name'] }} </option>
@endforeach
</select>