php - 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 = [];
解决方案
$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)
推荐阅读
- javascript - 从数组映射返回对象
- ios - 如何将此导航项标题向左移动?
- html - 以编程方式从 HTML 中获取文本
- anylogic - AB模型中如何使用vehicle inState命令
- backbone.js - 2014 年创建的主干代码停止工作,我不知道如何更新它
- python - 我想像这样设置我的变量值
- loops - 在剧本中为同一主机上的多个用户设置多个授权密钥
- unix - UNIX 中 IF 语句中的 Fork()
- python-3.x - 使用无头 Chrome 驱动程序截屏无法正常工作
- java - 显示从 InputStream/InputReader 流式传输的数据,同时保留空格