关于laravel的问题

mutmk8jj  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(94)

我新的laravel和我想知道如何使一个动态侧边栏。
现在看起来是这样的

在我的母语中,它的意思是"类别"--浆果、果汁、糖果--它们中的每一个都指向一个视图,在这个视图中,应该只有那些在数据库中的"类别"列中包含这三个中的一个的产品。
我的问题是:
1)我可以用foreach循环来做吗?
2)我是否需要为它们每个做一个模型和控制器,如果我做了,我需要什么功能?
3)如何仅显示具有正确类别的产品
现在我有:

@foreach($products as $item)
    <div class="col-sm-6 col-md-4">
      <a href="details/{{$item['id']}}">
        <div class="thumbnail">
        <img src="images/{{$item['galerija']}}" alt="...">
        <div class="caption">
          <h3>{{$item['nosaukums']}}</h3>
          <p>{{$item['cena']}}</p>
        </div>
      </div>
    </a>
    </div>
    @endforeach

所有的产品都有。我需要类似的东西吗?
更多细节。
在我的控制器中:

function shop()
{
    $data= Product::all();

   return view('pages.shop',['products'=>$data]);
}

我的型号:

class Product extends Model{
protected $primaryKey = 'id';
public $timestamps = false;
protected $fillable = [
    'nosaukums', 'cena', 'kategorija', 'galerija', 'apraksts',
];

}

but5z9lq

but5z9lq1#

1.是的。
1.因为是同一个模型,所以只需要一个控制器和一种方法(如果按照惯例,这将是show方法)。
1.使用关系。
由于你是用你的母语编码的(我无法破译),下面的例子是你如何做的一种方法。
P.S.在一个产品可以有多个类别的情况下,您应该使用透视表将关系转换为多对多。

类别模型

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    public function products(): HasMany
    {
        return $this->hasMany(Product::class);
    }
}

产品型号

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }
}

网页. php

Route::get('categories/{category}', [CategoryController::class, 'show'])->name('categories.show');

侧边栏视图

注意:您可以使用View Composer加载$categories

<div>
    @foreach($categories as $category)
        <a href="{{ route('categories.show', compact('category')) }}">
            {{ $category->name }}
        </a>
    @endforeach
</div>

类别控制器

<?php

namespace App\Http\Controllers;

use App\Models\Category;

class CategoryController extends Controller
{
    public function show(Category $category)
    {
        $products = $category->products;
        
        return view('categories.show', compact('products');
    }
}

相关问题