Mam do czynienia z dziwnym problemem w Yii2 Mam zapytanie, które ma jedno sprzężenie z tabelą agenta i (jedną do wielu) relację zadań z zadaniem działa dobrze, ale problem jest to, że zwraca wszystko w sznurku. Poniżej znajduje się zapytanie:Yii2 Active Record Odpowiedź JSON, typ casting issue
$query = self::find()
->select("job.*, agent.first_name,agent.last_name")
->leftJoin('agent', 'job.agent_id = agent.id')
->with('tasks')
->asArray()
->all();
i JSON zakodowany wynik:
{
"success": true,
"data": [
{
"id": "10",
"customer_id": "1",
"job_type": "normal",
"created": "2016-06-22 10:19:25",
"first_name": "Shayan",
"last_name": "",
"tasks": [
{
"id": "10",
"job_id": "10",
"title": "bring food",
"instruction": null,
"created": "2016-06-22 10:19:25",
},
{
"id": "10",
"job_id": "10",
"title": "bring pizza",
"instruction": null,
"created": "2016-06-22 10:19:25",
},
]
}
jeśli zauważy pola jak id, customer_id i job_id one wszystkie są całkowitą ale powróci jako ciąg. Ale jeśli usunę -> asArray() z powyższej kwerendy, zwróci ona prawidłowy typ castingu, ale problem jest pomijanie relacyjnych i pola leftJoin agenta tabeli, zwraca tylko pola tabeli zadań tutaj jest odpowiedź po usunięciu -> asArray() z powyższego zapytania.
{
"success": true,
"data": [
{
"id": 10,
"customer_id": 1,
"name": null,
"job_type": "normal",
"created": "2016-06-22 10:19:25",
},
Jeśli zauważysz w powyżej odpowiedzi nie mają stoły czynnik FIRST_NAME LAST_NAME i relacyjnych danych zadania całkowicie pominięte ale id i customer_id jest liczbą całkowitą.
Czy ktoś napotkał ten sam problem? twoja pomoc byłaby bardzo ceniona. Z góry dzięki.
Nie powinno być typu automatycznego odlewania zamiast robić to ręcznie Czy istnieje jakiś sposób obejścia tego problemu? –
Niestety, nie widzę sposobu, aby to zmienić (lub przynajmniej nie jestem tego świadomy), ponieważ jest to [domyślne zachowanie] (https://github.com/yiisoft/yii2/issues/9329#issuecomment- 128343292), według autora. Ale może to być błąd lub coś takiego. Pracowałem też z prefiksami, nie jest to takie trudne. –
Ale jeśli użyjesz tylko all() zamiast asArray() -> all(), zwróci to poprawny typ danych, ale problem spowoduje, że zwróci on tylko dane z jednej tabeli, która pomija powiązania i łączy. –