在 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 的字符串。