首页 > 解决方案 > Laravel 5.7 当我转储它时,我的参数返回的模型为空

问题描述

我试图展示具有相同类别的每个产品。如果我转储我的模型(猫),它会告诉我:

cat {#400 ▼
  #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: []
}

我认为这就是为什么当我选择该类别的每个产品时它什么都不返回。这是我的产品控制器:

<?php

namespace App\Http\Controllers;

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

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

    }

    public function shopindex()
    {
        //Producten onlangs toegevoegd
        $productsOTs = DB::table('productimages')->where('Afkorting', 'PPI')->orWhere('Productcode', '[0-9]+')->limit(3)->offset(83)->get();
            //$productsOTs = DB::select(DB::raw("SELECT * FROM wiz.productimages WHERE Afkorting = 'PPI' LIMIT 83, 3"));

        //Producten categorieën combobox  
        $productcats = DB::table('products')->distinct()->select('Productserie', 'Productserie')->get();
            //$productcats = DB::select(DB::raw("SELECT DISTINCT Productserie FROM wiz.products"));

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

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

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


        // Products from category
        $categorieProds = DB::table('products')->where(function ($query) use ($cat) {
                            $query->where('Productserie', '=', $cat);
                            })->get();

        dd($cat);

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

我的 web.php :

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

我来自/shop的foreach:

        <select class="form-control category" onchange="window.location=this.options[this.selectedIndex].value">
            <option value="" disabled selected hidden>Categorieën</option>
            @foreach ($productcats as $productcat)
                <option value="/shop/products/{{ $productcat->Productserie }}">{{ $productcat->Productserie }}</option>
            @endforeach
        </select> 

我的模型(cat.php)几乎是空的,我想也许这就是问题所在。我的模型中唯一的代码是:protected $guarded = [];

标签: phplaravelmodel

解决方案


$productcat->Productserie

Productserie 的类型是什么?这是主键还是类别名称(文本)?

你能确认你的拼写是否正确吗?对我来说应该是Productseries。但可能你的数据库中有一个拼写错误,否则 laravel 一定抛出了一个未知列的异常。

function shopCat(Cat $cat) 

我假设您在 URL 中发布类别名称。如果是这样,那么 Laravel 可能无法将类别名称转换为相关的 Cat 模型作为您方法的参数。相反,它可能会将 $cat 中的 null 传递给该方法

尝试调试 dd($cat) 并查看您在 $cat 中收到了什么。

如果 $cat 为空,那么后面的 where 子句将变为 false。所以它会返回null。

$query->where('Productserie', '=', $cat);

解决方案

如果 dd 表明 $cat 是 Cat 模型。然后将您的 where 子句更改为以下内容:

$query->where('Productserie', '=', $cat->Productserie);

但如果 dd 将 $cat 显示为字符串,则将您的方法签名更改为类似于以下内容:

public function shopCat(String $cat)

推荐阅读