我有一个简单的控制器函数,可以从db获取所有记录。但是,当我试图显示所有这些记录时,它什么也没显示。实际上它向我展示了这样的硬编码foreach循环。
@foreach ($compactData as $value) {{ $value->Name }} @endforeach
这是我的控制器功能。
public function showallProducts()
{
$productstock = Product::all()->stocks;
$productoldprice = Product::all()->OldPrices;
$productcurrentprice = Product::all()->CurrentPrice;
$compactData=array('productstock', 'productoldprice', 'productcurrentprice');
return view('welcome', compact($compactData));
}
这是我的观点
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
</head>
<body>
<div class="flex-center position-ref full-height">
<div class="content">
<div class="title m-b-md">
Laravel
</div>
<div class="title m-b-md">
All products
</div>
<table>
<tbody>
@foreach ($compactData as $value)
{{ $value->Name }}
@endforeach
</tbody>
</table>
</div>
</div>
</body>
为什么它表现得像这样。任何解决方案我正在使用phpstorm版本17.他们的任何设置问题是运行项目,因为我运行它的任何项目给了我唯一的页面,我只用html运行? 我的路线是。
Route::get('/', function () {
$action = 'showallProducts';
return App::make('ProductController')->$action();
});
答案 0 :(得分:1)
您检查过$compactData
变量了吗?请dd($compactData)
查看其中包含的内容。
问题1
您正在访问关系属性作为Eloquent集合的属性,如下所示:
Product::all()->stocks
这是不正确的。因为Collection对象没有属性stocks
,但是Product
对象可能有一个stocks属性。请阅读有关Collection的Laravel文档。
问题2
$compactData = array('productstock', 'productoldprice', 'productcurrentprice');
此行创建一个包含4个字符串的数组,普通字符串不可变。所以,你的$compactData
包含一个4字符串的数组。如果您想要一个带关联数组的变量,那么您需要执行以下操作:
$compactData = compact('productstock', 'productoldprice', 'productcurrentprice');
问题3
return view('welcome', compact($compactData));
在这里,您尝试将$compactDate
传递给welcome
视图但不幸的是compact()
函数不接受变量,但是我写的那个变量的字符串名称问题2 。所以,它应该是:
return view('welcome', compact('compactData'));
问题4
最后,在刀片中,您正在访问$compactData
数据变量的每个元素,并将它们打印为可能是对象的字符串。
答案 1 :(得分:0)
我认为您没有在保存视图文件的名称中提及blade
。因此,将保存文件的名称更改为:
filename.blade.php
再试一次。
说明:
@foreach ($compactData as $value)
这是刀片模板引擎的语法,要解析并执行它,您必须在名称中提及blade
扩展名。
答案 2 :(得分:0)