为什么Eloquent会更改toArray调用的关系名称?

时间:2014-10-14 15:40:52

标签: laravel laravel-4 eloquent

我遇到了Laravel的恼人问题,我希望有人知道如何覆盖它...

这适用于允许销售代表查看其所在地区的库存的系统。我正在构建一个编辑器,允许我们的销售经理进入并更新商店ACL,以便他可以管理他的销售代表。

我有两个相关的模型:

class Store extends Eloquent {

    public function StoreACLEntries()
    {
        return $this->hasMany("StoreACLEntry", "store_id");
    }

}

class StoreACLEntry extends Eloquent {

    public function Store()
    {
        return $this->belongsTo("Store");
    }

}

这里的想法是Store可以在ACL表中包含许多条目。

问题在于:我构建了一个通过AJAX与服务器交互的页面。管理员可以通过各种不同的方式进行搜索,并从ACL中查看每个存储和当前限制。我的控制器执行搜索并返回数据(通过AJAX),如下所示:

$stores = Store::where("searchCondition", "=", "whatever")
    ->with("StoreACLEntries")
    ->get();

return Response::json(array('stores' => $stores->toArray()));

客户端收到的响应如下所示:

{
    id: "some ID value",
    store_ac_lentries: [
        created_at: "2014-10-14 08:13:20"
        field: "salesrep"
        id: "1"
        store_id: "5152-USA"
        updated_at: "2014-10-14 08:13:20"
        value: "salesrep ID value"
    ]
}

问题在于StoreACLEntries名称被删除的方式:它变为store_ac_lentries。我做了一点挖掘,发现它是插入那些时髦下划线的toArray方法。

所以我有两个问题:"为什么?"和#34;如何阻止它这样做?"

1 个答案:

答案 0 :(得分:1)

自动将camelCase更改为snake_case有一些共同之处。您应该尝试将函数名称从StoreACLEntries更改为storeaclentries(小写)以删除此效果。