Получение данных отношений в Eloquent ORM (Laravel PHP) - PullRequest
1 голос
/ 12 мая 2019

Я создаю приложение Laravel и извлекаю данные из БД с помощью Eloquent ORM, отвечая JSON-ответом.В этом примере я получаю совпадения с некоторыми другими соответствующими данными по отношениям (player1, matchRule ...).

public function test() {
    $match = Match::where("state", 2)
        ->with("player1", "player2", "points", "matchRule")->first();

    return response()->json($match); // CASE A
    return response()->json((object) ["id" => $match->id]); // CASE B
    return response()->json((object) ["rule" => $match->match_rule]); // CASE C
}

В случае A все хорошо, и все соответствующие данные возвращаются.Пример:

{
   "id": 7,
   "some_other_match_property": "something",
   ...
   "match_rule": {
      "rule_1": "something",
      "rule_2": "something",
   }

}

В случае B я получаю только id совпадения, и он также отлично работает.

{
   "id": 7
}

В случае C я пытаюсь получить свойствоmatch_rule но я обнуляюсь.Зачем?Как видите, он присутствует в объекте $match при возврате полного соответствия в случае A.

{
    "rule": null
}

1 Ответ

2 голосов
/ 12 мая 2019

На первый взгляд я вижу, что вы загружаете свои matchRule отношения следующим образом ( верблюжий чемодан ):

$match = Match::where("state", 2)
    ->with("player1", "player2", "points", "matchRule")->first();
                                            ^^^^^^^^^^

Но тогда вы получаете доступ к следующим отношениям ( случай змеи ):

return response()->json((object) ["rule" => $match->match_rule]);
                                                    ^^^^^^^^^^^

Это не эквивалентно. Попробуйте вместо этого:

return response()->json((object) ["rule" => $match->matchRule]);
                                                    ^^^^^^^^^^
...