首页 > 解决方案 > 使用 Laravel Eloquent 模型显示数据库中的数据

问题描述

所以,我对 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

标签: laraveleloquent

解决方案


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

<?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'));
    }

请注意我是如何将数组 viacompact作为view函数的第二个参数传递的。你也可以使用view('products.index', ['products' => $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 获得)是否为空。


推荐阅读