Lumen 5.6.4 Коллекция ресурсов API не возвращает все данные - PullRequest
0 голосов
/ 04 марта 2019

У меня есть запрос, который возвращает после json, который я передаю в коллекцию ресурсов.проблема в том, что он возвращает все поля правильно, но когда дело доходит до поля companies_closed, он показывает ноль.тогда как companies_closed - это либо массив, либо пустой массив.Я не могу понять, почему это происходит.

Я использовал этот же метод (передача данных через набор функций) в Laravel 5.6.39, он отлично работает в Laravel.Но когда я делаю это здесь, в люмене 5.6.4, это не работает.

Я думал, что это может быть проблема с кешем, поэтому я следовал почти всем методам в этом URL, но безуспешно.так как это не сработало, я отменил все изменения.https://github.com/laravel/framework/issues/2501

Я не смог найти больше материалов о коллекции ресурсов lumen api.Может кто-нибудь, пожалуйста, посмотрите и скажите мне, что я делаю не так.любая помощь будет высоко ценится.

Eloquent Query:

$companiesQuery = CpdAdmin::where('admin_id', $admin->admin_id)
->with(['companies' => function($query) use($request) {
    $query->where('air_id', $request->airport_id)
    ->where('status', '1')
    ->with(['companiesClosed' => function($query) use($request) {
        $query->where('close_status', 'active')
        ->where(function ($queryWhere) use($request) {
            $queryWhere->where('start_date', '>=', $request->start_date)
                ->where('start_date', '<=', $request->end_date)
                ->where(function ($queryType) {
                    $queryType->where('journey_type', 'Departure')
                        ->orWhere('journey_type', 'Both');
                });
        })
        ->orWhere(function ($queryWhere) use($request) {
            $queryWhere->where('end_date', '>=', $request->start_date)
                       ->where('end_date', '<=', $request->end_date)
                       ->where(function($queryType) {
                            $queryType->where('journey_type', 'Arrival')
                                      ->orWhere('journey_type', 'Both');
                        });
        });
    }]);
}])
->get();

JSON (перед передачей его в коллекцию ресурсов):

JSON возвращается допередача его в коллекцию работает отлично, я показываю все так, как я ожидаю.

"data": [
    {
        "admin_id": 32,
        "admin_name": "Eden Parking",
        "email": "edenparking@hotmail.com",
        "admin_login": "edenparking@hotmail.com",
        "admin_information": "what information",
        "contact_number": 303633,
        "address": "paka dubai da",
        "invoice_email": "invoice@gmail.com",
        "contact_person": "uzair khan",
        "admin_rights": "1114",
        "admin_isactive": "1",
        "edit_status": 0,
        "created_at": null,
        "updated_at": null,
        "companies": [
            {
                "comp_id": 19,
                "comp_title": "S  Gatwick Meet & Greet",
                "comp_email": "mcpgatwick@gmail.com",
                "status": 1,
                "operation_data": "{\"operating_type\":\"24_7\",\"opening_status\":\"open\"}",
                "daily_bookings": 100,
                "monthly_bookings": 1000,
                "comp_admin": 32,
                "air_id": 14,
                "companies_closed": []
            },
            {
                "comp_id": 57,
                "comp_title": "Simply Parking Gatwick Meet & Greet",
                "comp_email": "mcpgatwick@gmail.com",
                "status": 1,
                "operation_data": "{\"operating_type\":\"24_7\",\"opening_status\":\"open\"}",
                "daily_bookings": 100,
                "monthly_bookings": 1000,
                "comp_admin": 32,
                "air_id": 14,
                "companies_closed": [
                    {
                        "id": 3101,
                        "start_date": "2019-03-04",
                        "end_date": "2019-03-15",
                        "journey_type": "Departure",
                        "close_status": "active",
                        "comp_id": 57,
                        "created_at": null,
                        "updated_at": null
                    },
                    {
                        "id": 3102,
                        "start_date": "2019-03-04",
                        "end_date": "2019-03-15",
                        "journey_type": "Both",
                        "close_status": "active",
                        "comp_id": 57,
                        "created_at": null,
                        "updated_at": null
                    }
                ]
            },
            {
                "comp_id": 149,
                "comp_title": "Park with us Gatwick",
                "comp_email": "mcpgatwick@gmail.com",
                "status": 1,
                "operation_data": null,
                "daily_bookings": 100,
                "monthly_bookings": 1000,
                "comp_admin": 32,
                "air_id": 14,
                "companies_closed": []
            }
        ]
    }
]

Здесь я передал запрос в коллекцию ресурсов

$companiesQueryResourceCollection = new CompanyResourceCollection($companiesQuery);

Коллекция ресурсов:

В самой последней функции у меня есть

'companies_closed' => $ eachCompany-> companies_closed

Я могу выполнить цикл companies_closed, но еслия могу получить что-то, если я ничего не получаю, потому что просто выдаст ошибку.

1 Ответ

0 голосов
/ 05 марта 2019

Хорошо, я исправил это сам, вот в чем проблема.

Отношения:

public function companiesClosed()
{
    return $this->hasMany(CpdCompanyClosed::class, 'comp_id', 'comp_id');
}

public function company()
{
    return $this->belongsTo(CpdCompany::class, 'comp_id');
}

Обратите внимание, что соглашение об именовании отношений companiesClosed

, где, как в ответе JSON, я видел companies_closed

Я использовал companies_closed в ресурсах API.когда я его поменял companyClosed он работал просто отлично.

Причина:

Соглашение об именовании отношений неверно.Я изменил все на это соглашение об именах company_closed.

...