我从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'数据库进行查询,并根据这些结果在另一个数据库中查询其名称,并将所有值打印在屏幕上。
答案 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
变量传递给视图。