在 Eloquent ORM 中检索关系数据 (Laravel PHP)
Retrieving relationship data in Eloquent ORM (Laravel PHP)
我正在创建 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
}
I case C,我试图得到 属性 match_rule
但我得到的是空值。为什么?如您所见,在案例 A.
中返回整个匹配项时,它出现在 $match
对象中
{
"rule": null
}
乍一看我可以看到你加载你的 matchRule
关系是这样的 (camel case):
$match = Match::where("state", 2)
->with("player1", "player2", "points", "matchRule")->first();
^^^^^^^^^^
但是你正在访问这样的关系 (snake case):
return response()->json((object) ["rule" => $match->match_rule]);
^^^^^^^^^^^
它们并不等同。试试这个:
return response()->json((object) ["rule" => $match->matchRule]);
^^^^^^^^^^
我正在创建 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
}
I case C,我试图得到 属性 match_rule
但我得到的是空值。为什么?如您所见,在案例 A.
$match
对象中
{
"rule": null
}
乍一看我可以看到你加载你的 matchRule
关系是这样的 (camel case):
$match = Match::where("state", 2)
->with("player1", "player2", "points", "matchRule")->first();
^^^^^^^^^^
但是你正在访问这样的关系 (snake case):
return response()->json((object) ["rule" => $match->match_rule]);
^^^^^^^^^^^
它们并不等同。试试这个:
return response()->json((object) ["rule" => $match->matchRule]);
^^^^^^^^^^