【问题标题】:Showing data from database using Laravel Eloquent Model使用 Laravel Eloquent 模型显示数据库中的数据
【发布时间】:2023-03-18 12:23:01
【问题描述】:

所以,我对 Laravel 很陌生,我想要实现的是将一些字符串从我的数据显示到页面。我正在使用 Eloquent 模型,但我无法弄清楚我在这里做错了什么。我在下面附上了我的一些代码。我希望我说得够清楚。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Product;

class ProductsController extends Controller
{

    public function index()
    {
    
        $products = Product::all();
        return view('products.index')->with('products', $products);
    }

这是我希望显示数据的位置。

@extends ('layouts.app')

@section ('content')
    <div class="container-fluid">
        <h1>Products</h1>
        @if(count($products) > 1 )
            @foreach ($products as $product)
                <div class="well">
                    <h3>{{$product->prod_name}}</h3>
                </div>
            @endforeach
        @else
            <p>No product found</p>
        @endif
    </div>
@endsection

更新:问题出在我的循环逻辑上 由于我的数据库中只有一项,我的循环应该是 >= 1 而不是 > 1

@if(count($products) >= 1 )
    @foreach ($products as $product)
        <div class="well">
            <h3>{{$product->prod_name}}</h3>
        </div>
    @endforeach
@else
    <p>No product found</p>
@endif

【问题讨论】:

  • 有什么错误吗?或者您面临的确切问题是什么?请在帖子中提及。
  • 请复制实际代码而不是代码图像。它有助于 SEO、可读性和可用性。
  • 你可以试试@if($products->count() > 1) 看看是否有什么不同。如果做不到这一点,请回显 $products->count(),以确认您确实有一些产品。
  • @Flame 嗨,对不起!我现在用实际代码而不是图片更新了帖子。
  • @Aashishgaba 问题是我无法遍历表以获取数据并将其显示在视图页面上。

标签: laravel eloquent


【解决方案1】:

让我们修正您的代码并使用正确的方法。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Product;

class ProductsController extends Controller
{

    public function index()
    {
    
        $products = Product::all();

        return view('products.index', compact('products'));
    }

注意我是如何通过compact 传递一个数组作为view 函数的第二个参数的。你也可以使用view('products.index', ['products' =&gt; $products]),我只是更喜欢紧凑,因为它更干净。

@extends('layouts.app')

@section('content')
    <div class="container-fluid">
        <h1>Products</h1>

        @if(!$products->isEmpty())
            @foreach($products as $product)
                <div class="well">
                    <h3>{{ $product->prod_name }}</h3>
                </div>
            @endforeach
        @else
            <p>No products found.</p>
        @endif
    </div>
@endsection

注意我是如何使用isEmpty 的,它检查一个集合(从 Eloquent 获得)是否为空。

【讨论】:

  • 谢谢,我现在可以通过修复循环部分来修复我的代码,但我会感谢有关如何解决问题的良好做法。
【解决方案2】:

而不是 with() 也许 View::share 可以工作。

$products = Product::all();
View::share('$products',$products);
return view('products.index');

别忘了从 Facades 导入 View 类。把它放在页面的开头

use Illuminate\Support\Facades\View;

【讨论】:

  • 当你想让数据对所有视图都可用时,你倾向于使用 view:share(),我认为这不会有任何区别
猜你喜欢
  • 1970-01-01
  • 2018-07-09
  • 2015-10-12
  • 2016-01-14
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
相关资源
最近更新 更多