【问题标题】:Laravel 5.7 foreach wont show anything, but variable is setLaravel 5.7 foreach 不会显示任何内容,但已设置变量
【发布时间】:2018-12-11 08:24:36
【问题描述】:

我的 foreach 不会显示任何东西,我不确定我是否正确传递了变量。我的控制器中的选择有效,如果我在修补程序中使用它,它就有效。但它不会在我看来。不是错误,只是没有。

我的网页:

   //shop
    Route::get('/shop', ['middleware' => 'auth', 'uses' => 'ProductsController@shopindex']);
    //shop categorie
    Route::get('/shop/products/{pcategorie}', ['middleware' => 'auth', 'uses' => 'ProductsController@shopCat']);
    //shop product detail
    Route::get('/shop/productdetail/{product}', 'ProductsController@productdetail');

我的控制器:

<?php

namespace App\Http\Controllers;

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

class ProductsController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function shopindex()
    {

        $productsOTs = DB::select(DB::raw("SELECT * FROM wiz.productimages WHERE Afkorting = 'PPI' LIMIT 83, 3"));
        $productcats = DB::select(DB::raw("SELECT DISTINCT Productserie FROM wiz.products"));

        return view('shop', compact('productsOTs', 'productcats'));
    }

    public function productdetail(Product $Product)
    {   
        return view('Products.productdetail', compact('productsOT'));
    }

    public function shopCat(pCategorie $pCategorie)
    {
        // Combobox items Cats
        $productcats = DB::select(DB::raw("SELECT DISTINCT Productserie FROM wiz.products"));

        // Products from category
        $categorieProds = DB::select(DB::raw("SELECT * FROM products WHERE Productserie = '$pCategorie'"));

        return view('Products.allproducts', compact('productcats', 'categorieProds'));
    }

}

在我看来,foreach:

   @if (isset($categorieProds))
      @foreach ($categorieProds as $categorieProd)
         <li>test</li>
      @endforeach

   @else
      <h1>Not found</h1>
   @endif

我希望有人可以帮助我:)

【问题讨论】:

  • dd($categorieProds); 的结果是什么?
  • 它什么也没给我:[]。但是,如果我在 tinker 中使用控制器中的代码,它确实给了我需要的记录
  • 请 dd($pCategorie)。
  • pCategorie 作品:pCategorie {#381 ▼ #guarded: [] #connection: null #table: null #primaryKey: "id" #keyType: "int" +incrementing: true #with: [] #withCount: [] #perPage: 15 +exists: false +wasRecentlyCreated: false #attributes: [] #original: [] #changes: [] #casts: [] #dates: [] #dateFormat: null #appends: [ ] #dispatchesEvents: [] #observables: [] #relations: [] #touches: [] +timestamps: true #hidden: [] #visible: [] #fillable: [] }

标签: laravel foreach laravel-5.7


【解决方案1】:

您没有在选择查询结束时调用get()

原始 SQL 不是必需的,最好使用正确的查询构建器方法。

让我们清理这些查询:

// instead of writing this
$productcats = DB::select(DB::raw("SELECT DISTINCT Productserie FROM wiz.products"));

// write this
$productcats = DB::table('products')->distinct()->select('Productserie')->get();


// bad
$categorieProds = DB::select(DB::raw("SELECT * FROM products WHERE Productserie = '$pCategorie'"));

// good
$categorieProds = DB::table('products')->where('Productserie', $pCategorie)->get();

Would you like to know more?

【讨论】:

  • 没有那么简单。他在 DB::raw select 中有完整的查询。看起来他犯了很多错误。
  • 没有得到,没有聚会。
  • Ofc,我在你之前 5 分钟给出了相同的答案,但它是不正确的。 DB::select(DB::raw("SELECT * FROM products WHERE Productserie = '$pCategorie'")) 无需 get 即可执行,因为它在 select 中有完整的查询。
  • 另外,看起来 $pCategories 是一个对象,他需要它的属性。
  • 感谢您提供更好看的查询。我是laravel的新手,所以我还在学习。新的查询仍然不会给我任何东西
【解决方案2】:

使用-&gt;get() 方法重写查询。并且看起来 $pCategorie 是对象,可能你应该使用它的属性,例如 $pCategorie->id。

public function shopCat(pCategorie $pCategorie)
{
    // Combobox items Cats
    $productcats = DB::table('wiz.products')
        ->select('Productserie')
        ->distinct()
        ->get();

    // Products from category
    DB::table('products')
        ->where('Productserie', $pCategorie)
        ->get();

    return view('Products.allproducts', compact('productcats', 'categorieProds'));
}

【讨论】:

  • 它给了我一个错误:调用数组上的成员函数 get()
猜你喜欢
  • 1970-01-01
  • 2013-03-01
  • 2016-04-29
  • 2014-04-27
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2020-12-17
  • 2018-06-16
相关资源
最近更新 更多