php - 如何在 Laravel 中将 @foreach 添加到 SQL 原始语句

标签 php mysql laravel foreach

我有一个数组$shop_ids,所以我想遍历并将这些id 添加到SQL 语句的子查询中。 SQL子查询的数量应该等于id的数量。

我希望有这样的查询,但显然 @foreach 不起作用,只是成为 SQL 查询的一部分:

DB::select('select
        pr.product_name,
        pr.brand,
        coalesce(pr.weight, pr.volume) wv,
        sli.quantity
        {{@foreach ($shop_ids as $id)
                ,{{(select
        p.price

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

                from prices p1

                group by p1.product_id, p1.shop_id) grouped on grouped.maxed_date=p.created_at

        join shop_names s on s.id=p.shop_id
        where p.product_id=sli.product_id
        and s.id=$id)}}}}

        from shopping_list_items sli
        join products pr on pr.id=sli.product_id

        where sli.shopping_list_id= :slid

        order by 5 asc', ['slid'=>$this->id])

最佳答案

你可以这样做作为例子 -

$ids_query = '';
// generate the queries in loop
foreach ($shop_ids as $id) {
    $ids_query .= ", (select ..... where .. and s.id=$id)";
}
// use in the main query
DB::select("select
        ...,
        sli.quantity
        $ids_query
        from shopping_list_items sli
        ...
        order by 5 asc", ['slid'=>$this->id]);

关于php - 如何在 Laravel 中将 @foreach 添加到 SQL 原始语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39424588/

相关文章:

php - 为每个用户生成随机唯一代码

java - 检查器显示 3 秒更新,如何获取新值?

mysql - Laravel SQLSTATE[22007] : Invalid datetime format: 1292 Incorrect datetime value: '2019-03-10 02:00:39' for column 'updated_at' (daylight savings?)

C# LINQ-SQL 帮助 - 查询超过 10,000 项的数据库

php - 如何在 Laravel 中将 include_once() 与命名空间一起使用

php - 如果在 Woocommerce 中没有应用优惠券,则自动将折扣应用于用户角色

php - 从目录中用php读取多个文件

MySQL 错误 1045 (28000) : Access denied for user 'bill' @'localhost' (using password: YES)

laravel - Laravel v6 中未知的命名参数 $store 错误

MySQL/Laravel/Vue - 单个表单输入可以将多个值提交到多个列吗?