在雄辩的ORM(Laravel PHP)中检索关系数据

在雄辩的ORM(Laravel PHP)中检索关系数据,php,laravel,eloquent,eloquent-relationship,Php,Laravel,Eloquent,Eloquent Relationship,我正在创建Laravel应用程序,我正在使用雄辩的ORM从DB检索数据,同时使用JSON响应进行响应。在本例中,我通过关系(player1,matchRule…)获得与其他相关数据的匹配 在案例A中,一切正常,并返回所有相关数据。例如: { "id": 7, "some_other_match_property": "something", ... "match_rule": { "rule_1": "something", "rule_2": "

我正在创建Laravel应用程序,我正在使用雄辩的ORM从DB检索数据,同时使用JSON响应进行响应。在本例中,我通过关系(player1,matchRule…)获得与其他相关数据的匹配

在案例A中,一切正常,并返回所有相关数据。例如:

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

}
在案例B中,我得到了匹配的id,它也工作得很好

{
   "id": 7
}
在案例C中,我试图获取属性
匹配规则
,但得到的是null。为什么?如您所见,在案例A中返回整个匹配时,它出现在
$match
对象中

{
    "rule": null
}

乍一看,我可以看到您像这样加载
matchRule
关系():

但是接下来您将像这样访问关系():

这些并不等同。请尝试以下方法:

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

哦,是的,你说得对!非常感谢。但正如您在案例A中所看到的,
$match
对象中的属性名是
match\u rule
,所以我为什么不能通过
->match\u rule
?@P.N访问它。我认为在Laravel中,当作为属性获取关系(函数名)的snake版本是默认行为。选中,可以将此设置禁用为模型的
$snakeAttributes
属性:
公共静态$snakeAttributes=false。尝试一下,然后回来告诉我们它是否有效。祝您有个美好的一天。
$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]);
                                                    ^^^^^^^^^^