在 Laravel 的视图中加载数据
Load data in view in Laravel
我有一个简单的控制器功能,可以从数据库中获取所有记录。但是当我试图显示所有这些记录时,它什么也没显示。事实上,它向我展示了像这样的硬编码 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();
});
我想你没有在保存它的视图文件的名称中提到 blade
。因此,将保存文件的名称更改为:
filename.blade.php
然后重试。
解释:
@foreach ($compactData as $value)
这是blade模板引擎的语法,要解析和执行它,必须在名称中提到blade
扩展名。
您的网络服务器很可能有问题。
尝试使用Laravel Valet作为开发环境。
编辑:我发现了这个:Valet for Windows
你检查过你的 $compactData
变量了吗?请 dd($compactData)
查看它包含的内容。
问题 1
您正在访问关系 属性 作为 Eloquent collection 的 属性,如下所示:
Product::all()->stocks
这是不正确的。因为 Collection object 没有 属性 stocks
但是 Product
object 可能有股票 属性。请阅读有关 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
最后,在 blade 中,您正在访问 $compactData
数据变量的每个元素并将它们打印为可能是 object 的字符串。
我有一个简单的控制器功能,可以从数据库中获取所有记录。但是当我试图显示所有这些记录时,它什么也没显示。事实上,它向我展示了像这样的硬编码 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();
});
我想你没有在保存它的视图文件的名称中提到 blade
。因此,将保存文件的名称更改为:
filename.blade.php
然后重试。
解释:
@foreach ($compactData as $value)
这是blade模板引擎的语法,要解析和执行它,必须在名称中提到blade
扩展名。
您的网络服务器很可能有问题。
尝试使用Laravel Valet作为开发环境。
编辑:我发现了这个:Valet for Windows
你检查过你的 $compactData
变量了吗?请 dd($compactData)
查看它包含的内容。
问题 1
您正在访问关系 属性 作为 Eloquent collection 的 属性,如下所示:
Product::all()->stocks
这是不正确的。因为 Collection object 没有 属性 stocks
但是 Product
object 可能有股票 属性。请阅读有关 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
最后,在 blade 中,您正在访问 $compactData
数据变量的每个元素并将它们打印为可能是 object 的字符串。