foreach 中只有 return 一行

Only return one row in foreach

我从 Laravel 开始,在 laravel blade.

上获取查询结果时遇到问题

从通过查询 MySQL 'mysql' 获得的列表中,我想检查它在另一个 'tienda' 数据库的另一个 table 中的名称。

一切正常,但它只是return第二次查询的最后一个值,它并没有return在$products查询中得到的对应名称的所有值$products_name.

控制器

    $productos = [
        'id' => $id
    ];

    $products = DB::connection('mysql')
                ->SELECT("SELECT * FROM promociones_product WHERE id_promo = $id", $productos);

    foreach ($products as $product)
    {
        $products_name = collect(DB::connection('tienda')
                ->table('ps_product_lang')
                ->where('id_product', $product->id_product)
                ->get(['name', 'id_product']));
    }

    return view('promociones-products')->with('promo', $products_name);

Blade

        @foreach($promo as $product)
                <tr>
                    <td>{{ $product->id_product }}</td>
                    <td>{{ $product->name }}</td>
                </tr>
        @endforeach

我需要对 'mysql' 数据库进行查询,并根据这些结果在另一个数据库中查询它的名称,所有值都会打印在屏幕上。

所以您提供的代码存在一些问题。

首先,在您的循环中,您将在每个循环上创建一个名为 'products_name' 的新集合,该集合会不断覆盖自身。

有很多方法可以解决这个问题,但我会怎么做:

$promo = []; // Initialise a new array called promo

foreach ($products as $product)
{
    // Append the collection to the new array
    $promo[] = collect(DB::connection('tienda')
            ->table('ps_product_lang')
            ->where('id_product', $product->id_product)
            ->get(['name', 'id_product']));
}

现在您有一个数组,其中包含集合中的所有产品。 现在获取该数据的循环应该可以工作了。

然后您可以 return 使用几种方法将数据显示到视图中,我的首选方法确实是 compact() 如下所示:

return view('promociones-products', compact('promo'));

compact() 会做的是抓取视图中提到的任何变量名称并将其传递给视图。此压缩包会将 $promo 变量传递给视图。