【问题标题】:Get category and Sub_subcategories list using query builder使用查询生成器获取类别和 Sub_subcategories 列表
【发布时间】:2023-03-28 20:17:01
【问题描述】:

如何获得这样的类别和子类别列表:

1 部手机

  • 苹果

  • 三星

  • 诺基亚

2:笔记本电脑

  • Mac

  • HP

  • 戴尔

  • 索尼

3:电视

  • 三星

在控制器中使用查询生成器并在视图中使用 foreach 循环

我的控制器

$sub_catagories = DB::table('books_categories')
->join('sub_catagories','sub_catagories.catId','=','books_categories.catId')->get();
return view('index',compact('sub_catagories'));

我的分类表

    public function up()
    {
        Schema::create('books_categories', function (Blueprint $table) {
            $table->increments('catId');
            $table->string('catName', 50)->nullable(false);
            $table->timestamps();
        });
    }

我的子目录表

    public function up()
    {
        Schema::create('sub_catagories', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->integer('catId');
            $table->timestamps();
        });
    }

【问题讨论】:

  • 为什么对我的问题投反对票,我遵守了规则,如果有人理解这个问题有问题,请在评论中写出来
  • 不知道downvote,但我只是不太了解..你有3个相关的模型,比如A、B、C吗? A 有很多 B,B 有很多 C。你想得到所有的 A 和他们的 B 和他们的 C 吗?在您的查询中,我只看到了 2 个表,这意味着模型
  • 另外,最好把你的模型和它们的关系也放在这里
  • 不,我只有两个表 Category 和 Subcategories,我想要一个 category 下面的所有类别和子类别的列表

标签: laravel eloquent query-builder


【解决方案1】:

我写了一些整个循环的例子。 laravel 中有约定使用唯一的自动增量“id”,并具有像 RELATION_id 这样的外键。因此,如果您想更改表名和列名,可以按照以下示例进行操作:

类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    protected $table = 'categories';

    protected $fillable = [
        'id',
        'name',
    ];

    public function subcategories(){
        return $this->hasMany(Subcategory::class, 'category_id', 'id');
    }
}

子类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Subcategory extends Model
{
    protected $table = 'subcategories';

    protected $fillable = [
        'id',
        'category_id',
        'name',
    ];

    public function category(){
        return $this->belongsTo(Category::class, 'category_id');
    }
}

类别表迁移

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCategoriesTable extends Migration
{
    public function up()
    {
        Schema::create('categories', function (Blueprint $table) {
            // PRIMARY
            $table->bigIncrements('id');
            // ADDITIONAL
            $table->string('name');
            // TIME
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('categories');
    }
}

子类别表迁移

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateSubcategoriesTable extends Migration
{
    public function up()
    {
        Schema::create('subcategories', function (Blueprint $table) {
            // PRIMARY
            $table->bigIncrements('id');
            // FOREIGN
            $table->unsignedBigInteger('category_id')->nullable();
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade')->onUpdate('cascade');
            // ADDITIONAL
            $table->string('name');
            // TIME
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('subcategories');
    }
}

在控制器中的使用

// 1
public function categories()
{
    $categories = Category::all()->get();

    return view('categories', [
        'categories' => $categories,
    ]);
}
// 2
public function catsWithSubcats()
{
    $cats_with_subcats = Category::with('subcategories')->get();

    return view('cats_with_subcats', [
        'categories' => $cats_with_subcats,
    ]);
}
// 3
public function subcatsWithCats()
{
    $subcats_with_cats = Subcategory::with('category')->get();

    return view('subcats_with_cats', [
        'subcategories' => $subcats_with_cats,
    ]);
}

如果您想在刀片中显示所有类别及其子类别,则无需使用第 2 或第 3 方法,只需使用第 1 方法。在“resources/views/...”中创建“categories.blade.php”并在其中写下如下内容:

@foreach($categories as $category)
    @foreach($category->subcategories as $subcategory)
        <p>{{ $subcategory->name }}</p>
    @endforeach
@endforeach

【讨论】:

  • 非常感谢您的友好回答以及如何在列表中显示它?
猜你喜欢
  • 2014-12-31
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多