【问题标题】:How to query laravel collection result如何查询 laravel 集合结果
【发布时间】:2018-08-28 13:24:08
【问题描述】:

我从 Laravel 集合中的存储过程中获取数据结果。

数据就像 SQL 表。集合对象内的相同键(列名)。

有没有办法查询(原始 SQL 查询)这个集合并得到我想要的最终结果数据?

我查看了Laravel collection documentation,我可以运行一些方法来查询集合,但这不是原始 SQL 查询(我需要对集​​合数据运行一点复杂的原始 SQL 查询。)

  1. 理想情况下,我需要根据集合数据创建一个临时 SQL 表。集合可能会根据结果而有所不同,并且需要基于该结果创建临时表。

  2. 我还查看了Redis server,我在其中临时存储我的集合并进行查询,但没有找到可以存储为 SQL 表并在其上运行 SQL 查询的任何内容。

  3. 第三个选项是将结果数据存储在Web SQL 上并运行查询,但还需要下载正在从后端完成的 excel。

有人遇到过类似的问题吗?也许我可以用其他东西来解决这个问题。

【问题讨论】:

    标签: php sql laravel collections redis


    【解决方案1】:

    您应该能够使用这样的模型进行查询:

    //Query the db, and fetch collection with get()
    $userCollection = User
        ::where('function_id', 3)
        ->get();
    //Query the collection and fetch the first answer, resulting in a user model
    $pietPaulusma = $userCollection
        ->where('firstname', 'Piet')
        ->where('lastname', 'Paulusma')
        ->where('email', 'piet@paulus.ma')
        ->first();
    

    或者没有这样的模型:

    DB::table('users')
        ->select(DB::raw('count(*) as user_count, status'))
        ->where('status', '<>', 1)
        ->groupBy('status')
        ->get();
    

    如果你学习this documentation,你应该走得更远:)

    希望对你有帮助!

    【讨论】:

    • 我需要对结果集合进行一堆聚合和操作。如果可能的话,使用原始 SQL 查询很容易。正如我提到的,我研究了所有方法,但需要运行原始 SQL。我不使用其他方式,因为我需要从集合中检索数据。
    • 那么简单的旧 'DB::raw('select * from users where id = 1')' 就足够了。整个查询都可以进去。
    • 你可以把它和laravel.com/docs/5.6/cache结合起来,如果你愿意,可以把你的结果存储在缓存中。
    • 我得到的结果集合每次都不一样。对于不同类型的数据,它可能完全不同。那么我怎样才能创建临时。每次根据收集数据缓存中的表。如果可以的话,我可以做到。
    • 你想存储数据是因为它是一个长时间运行的查询(慢),还是因为它只是你不想通过 apachesql 连接的大量数据及以上?
    【解决方案2】:

    您可以使用 query builder 类编写原始 sql 查询。如果你想检索一些数据,你可以使用select 方法,比如

    \DB::select('SELECT * FROM myTable WHERE ...'); // your complex query
    

    您可以将整个原始 sql 查询放在此方法中。也可以使用准备语句,如

    \DB::select('SELECT * FROM myTable WHERE id = ?', [2])
    

    以确保防止 sql 注入。 在docs阅读更多关于原始查询的信息

    【讨论】:

    • #1。我需要结果收集数据。我得到的。 #2。我需要基于#1 的第二组数据。处理数百万条记录,并且无法进行另一个复杂的原始查询以再次从数据库中检索数据。(已经进行了一次大查询以获得#1。)
    • 您要求原始查询,我向您展示了如何做到这一点。如果要从此查询中获取集合,可以使用collect() 方法。如果您的问题是关于特定查询的,那么您应该提供一些代码并准确告诉我们您想要实现的目标
    • 感谢您的调查,但我问,如何对收藏进行原始查询。 (不在数据库上。)正如我所提到的,我确实使用 store proc 对数据库进行原始查询以取回集合。我需要查询该集合以获取第二组数据。如果我的问题不是很清楚,我很抱歉。我将对其进行更新并尝试使其更加清晰。感谢您的反馈。
    猜你喜欢
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 2018-03-04
    • 2021-02-23
    相关资源
    最近更新 更多