在foreach中仅返回一行

时间:2019-05-21 14:52:14

标签: laravel laravel-5.8

我从Laravel开始,但是在laravel刀片上获取查询结果时遇到麻烦。

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

一切都很好,但是它只返回第二个查询的最后一个值,而不返回$产品查询中具有在$ 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);

刀片

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

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

1 个答案:

答案 0 :(得分:0)

因此,您提供的代码存在两个问题。

首先,在循环中,您将在每个循环上创建一个名为“ 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']));
}

现在您有了一个包含所有产品系列的数组。 现在,获取数据的循环应该起作用了。

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

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

compact()的作用是获取视图中提到的所有变量名,并将其传递给视图。该契约会将$promo变量传递给视图。