代码之家  ›  专栏  ›  技术社区  ›  whitwhoa

stdClass对象的有力返回数组?

  •  0
  • whitwhoa  · 技术社区  · 8 年前

    是否有内置的方法从雄辩的模型而不是雄辩的集合返回标准类对象数组?例如,一个人可以做到:

    return json_decode(json_encode(\App\User::where('status', 'active')
                    ->get()->toArray()));
    

    然而,这似乎是不必要的开销,因为我们将把响应转换为一个有说服力的集合,然后转换为一个数组,然后对该数组进行json编码,然后对该字符串进行json解码。。。

    我之所以使用这个功能是因为我正在分解一个大型企业应用程序,这个应用程序最初是用控制器方法中的所有业务逻辑创建的(事实证明很难维护)。我在项目中实施了一个标准,即对数据库的所有访问(使用雄辩的模型和查询生成器)必须在该特定实体的服务类中执行,而从服务类返回的数据应该是原始的php类型,因此如果最终决定用另一个orm替换雄辩的或者完全替换mysql,那么这些服务类是唯一需要重写的东西(类似于存储库模式,但事实并非如此,因为服务类包含业务逻辑以及通过模型类访问数据库)

    我想解决这个问题的一个办法是扩展基类,使其包含一个方法,比如 toObj() (可能不是最好的名字……幸好我没有加入标准委员会;)

    2 回复  |  直到 8 年前
        1
  •  3
  •   lagbox    8 年前

    你可以试着去 Query\Builder 上的实例 Eloquent\Builder 在给模特补水之前把记录拿出来。

    \App\User::where('status', 'active')->getQuery()->get();
    

    这将返回到目前为止使用 Query\Builder@get 直接返回 stdClass 对象,而不是 Eloquent\Builder@get 最后会打电话来 查询\Builder@get 无论如何,要水合物模型实例。

    你得检查一下有没有人叫你进来 雄辩的构建者@get 对于您正在执行的特定查询不需要。 示例:全局作用域 App\User::...->applyScopes()->getQuery()->get()

        2
  •  2
  •   Tim Lewis    8 年前

    你可以用

    DB::table("user")->where("status", "active")->get()->toArray();
    

    使用 DB::table("user") 而不是 User:: 将返回 Collection 属于 stdClass 对象而不是 收藏 属于 User 模型。(或单个,取决于闭合, ->get() ->first() )

    请记住,您将无法访问 用户 模型。

    我应该补充一下

    return json_decode(json_encode(\App\User::where('status', 'active')->get()->toArray()));
    

    可能会被转换成

    $records = \App\User::where('status', 'active')->get()
    return response()->json($records);
    
    推荐文章