php - Laravel 5. DB::select 工作原理

标签 php mysql sql laravel laravel-5

这是原始 SQL 查询:

    $best_price = DB::select('select id,product_id, shop_name, product_name, brand, weight_volume, min(price)

    FROM (
            select
    p.id, p.product_id, p.shop_id, s.shop_name, pr.product_name, pr.brand, coalesce(pr.weight, pr.volume) weight_volume, p.price

    from prices p
    inner join (
            select p1.id price_id,p1.product_id id, max(p1.created_at) maxed_date

    from prices p1

    where product_id= ?

    group by p1.id, p1.product_id, p1.shop_id) grouped on grouped.maxed_date=p.created_at and grouped.price_id=p.id
    join products pr on pr.id=p.product_id
    join shop_names s on s.id=p.shop_id

    group by p.id, p.product_id, p.shop_id) grouped

    GROUP BY product_id,shop_name', [$request->product]);

在 DBeaver 中,我得到了 "Metro C&C"min(price) 的一行结果。

但是如果我这样做 dd($best_price) 我会得到以下结果:

array:2 [▼
  0 => {#158 ▼
    +"id": 46
    +"product_id": 69
    +"shop_name": "Metro C&C"
    +"product_name": "Cream"
    +"brand": ""Tastyland""
    +"weight_volume": 0.22
    +"min(price)": 300.0
  }
  1 => {#160 ▼
    +"id": 47
    +"product_id": 69
    +"shop_name": "Klopshop"
    +"product_name": "Cream"
    +"brand": ""Tastyland""
    +"weight_volume": 0.22
    +"min(price)": 300.0
  }
]

如果我这样做

foreach($best_price as $best_price_id) {
            return $best_price_id->shop_name;
        };

我收到以下结果“Metro C&C”

我有以下问题:

  1. Laravel 如何理解最低价格为 300 的结果有两种(其实这是我期望的结果),而 DBeaver 只提供一种?我应该如何更改 SQL 查询以获得 2 行结果?

  2. 为什么foreach只返回第一行?

最佳答案

有几件事,首先使用 Laravel 的查询构建器方法来编写查询。不是行sql。您可以从 this official document. 获取它们

返回所有值,而不是单个值。

$the_best_price = []; //initializing an empty array.

foreach($best_price as $best_price_id) {
        $the_best_price[] = $best_price_id->shop_name;
    };
return $the_best_price;  //this will return all as an array,

当您使用return时,它会终止执行并返回它所拥有的内容,在您的问题中,它只有一个值。首先创建一个数组,然后将其返回foreach 循环。

关于php - Laravel 5. DB::select 工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214453/

相关文章:

php - 使用 PHP 调整 HTML 图像标记的内容

php - JQWidgets 组合框键入的值未回显或提交到数据库

javascript - 如何根据 mysql 中的 2 个单选按钮值填充选择输入

sql - 在 SQL Server 2008 中维护 'set' 的最有效方法?

sql - 在 Sql server 字符串连接中处理 NULL

php - INSERT 或重复 KEY UPDATE

php - 返回查询的最旧时间戳

php - 将 MySQL 结果存储到 PHP 数组或从 PHP 数组显示 MySQL 结果

mysql - sequel pro 客户端无法连接到 MYSQL 容器

mysql - 在特定日期执行触发器