我想在客户点击产品页面内的订单后按价格订购我的产品。我不断收到下一个错误:未定义索引:title(查看:C:\ xampp \ htdocs \ eshop \ resources \ views \ content \ item.blade.php)。 我的' item.blade.php'是在单独页面中显示产品较大尺寸的页面。我认为问题出在我的控制器项目函数或我的模型getItem函数中,我可能错了...如果你能帮助我,我将不胜感激。谢谢
我的路线:
for map in arr:
for mID in list(arr[map]): # here's the copy of the keys
v = arr[map][mID]['val']
if v < 1:
del arr[map][mID] # allowed because you are not iterating on the dict, but on the copy of the keys
我在content.products中的观点:
Route::get('shop/{category_url}/sorting-{sort?}', 'ShopController@products');
我的item.blade.php:
@if($products)
<br><br>
<a href=" {{ url('shop/'.$category['url'].'/sorting-asc')}}" style="color:black"> High to low</a> |
<a href=" {{ url('shop/'.$category['url'].'/sorting-desc')}}" style="color:black">Low to high</a>
我的控制器:
@extends ('master')
@section('content')
<div class="row">
<div class="col-md-12 text-center">
@if('item')
<h1>{{ $item['title']}}</h1>
<p><img width="500" src="{{ asset ('images/' . $item['image'])}}" </p>
<p>{!! $item['article'] !!}</p>
<p><b>Price on site:</b>{{ $item['price']}}$</p>
<p>
@if(Cart::get($item['id']))
<input disabled="disabled" type="button" value="In Cart!" class="btn btn-success">
@else
<input data-id="{{ $item['id']}}" type="button" value="+ Add to cart" class="btn btn-success add-to-cart">
@endif
<a href="{{ url('shop/checkout') }}" class="btn btn-primary">Checkout</a>
</p>
@else
<p class="text-center" style="font-size: 18px">No product details ...</p>
@endif
</p>
@endsection
我的模特:
public function products(Request $request, $category_url, $sort= 'ASC'){
Product::getProducts($category_url, self:: $data);
$catsort = Categorie::where('url', '=', $category_url)->first();
$products = Product::where('categorie_id', $catsort->id)->orderBy('price', $sort)->get();
return view('content.products', self::$data ,['products' => $products, 'sort' => $sort]);
}
public function item($category_url, $product_url){
Product::getItem($product_url, self::$data);
return view('content.item', self::$data);
}
答案 0 :(得分:1)
因此,基于聊天,我将尝试提供答案。
首先,我们需要了解您希望如何构建数据库。
我可以肯定地看到你有产品&amp;分类。我仍然不清楚你用$ items尝试实现的目标。
所以,从这开始,你有两个表。让我们通过思考来确定他们之间的关系。首先,问一个问题,产品可以有多少类别(1个或多于1个)?大多数人构造类别,因此产品可以有多个,所以在Laravel中,这被称为HasMany关系。与此相反的是#34;一个类别可以生产多少种产品?&#34;。在这种情况下,答案再次超过1.因此,这实际上是一个BelongsToMany关系,而不是HasMany关系。一个类别可以有很多产品,一个产品可以有很多类别。
接下来,您需要创建一个数据透视表。这是一个表,用于存储产品的ID以及具有关系的类别的ID。您可以创建一些看起来像这样的迁移。他们每个人都应该进入&#34; up&#34;方法
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('slug', 100)->index();
$table->integer('price');
$table->timestamps();
});
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('slug', 100)->index();
$table->timestamps();
});
Schema::create('category_product', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->index();
$table->integer('product_id')->index();
$table->timestamps();
});
接下来,我们需要设置模型以接受关系。因此,在您的Product.php类中,添加以下方法。
public function categories(){
return $this->belongsToMany(Category::class);
}
与Category.php类相反。
public function products(){
return $this->belongsToMany(Product::class);
}
现在,您应该能够像这样访问您的关系
$category = Category::first();
$products = $category->products;
好的,现在让我们开始吧。你的路线看起来很好,但我不会按照你的方式添加排序。您可以将其作为GET数据发送,如http://example.com/shop/test-category?sort=ASC
Route::get('shop/{category_url}', 'ShopController@products');
好的,现在你的控制器了。
public function products(Request $request, $category_url){
$category = Category::with(['products' => function($q){
$q->orderBy('price', request()->get('sort')??"ASC");
}])->whereSlug($category_url)->first(); // Eager load in products
return view('content.products', ['category' => $category]);
}
最后,在您的刀片中,您现在可以使用对象语法而不是数组语法。
@section('content')
Category Name: {{$category->name}} <br />
@foreach($category->products as $product)
Product Name: {{$product->name}} <br />
Product Price: {{$product->price}} <br />
Product Name: {{$product->name}} <br />
@endforeach
@endsection
如果没有看到更多,我可以更具体,因为我不清楚你是如何处理你的$物品的。您应该按照我们设置产品和类别的方式进行设置。考虑一下这种关系,并确定它是否是&#34; HasMany&#34;,&#34; HasOne&#34;或&#34; BelongsToMany&#34;。
此外,您应该尝试并遵循默认的命名约定。您的数据库表应为小写和复数。所以表格名称应该是&#34; products&#34;和&#34;类别&#34;。你的模型应该是单一的。 &#34;产品&#34; &安培; &#34;分类&#34 ;.无需为其命名&#34;分类&#34;。然后,对于所有数据透视表,您希望将它们命名为以下&#34; category_product&#34;。因此,您正在使用两个表格进行单数和字母顺序排列。最后,在您的数据库中,您需要确保您的数据透视表列名为&#34; product_id&#34; &安培; &#34; category_id&#34;,所以数据库名称的单数版本+&#34; _id&#34;。
我希望这足以让你前进。