Laravel 批准的类别相同 table
Laravel Approved Categories get in same table
Laravel版本:7.0
这是我的 categories
table.
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('parent_id')->default(0);
$table->string('name');
$table->boolean('status')->default(1);
$table->timestamps();
});
有两个级别的类别。
如果parent_id
是0
,那么就是category
,如果parent_id
不是0
,那么就是subcategory
.
我想得到所有有 status == 1
的 categories & subcategories
& 如果它是 subcategory
,那么它的 parent category's status
应该是 1
.
我制作了Category
模型。
$categories = Category::where('status', 1)->get();
以上查询可以获得parent category's status == 0
的子类别。
如何过滤所有类别和子类别?
谁能帮帮我?
您可以将任务分成两部分。
- 获取所有类别(状态 = 1 且 parent_id = 0)
- 获取所有子类别(status = 1 and parent_id != 0 and parent.status = 1)
$categories = Category::query()
// 1.
->where(function ($query) {
$query->whereStatus(1)->whereParentId(0);
})
// 2.
->orWhere(function ($query) {
$query
->where('parent_id', '!=', 0)
->whereStatus(1)
->whereHas('parent', function ($query) {
$query->whereStatus(1);
});
})
->get();
请记住,PHP 闭包在 SQL 中的工作方式与 ( )
相同。所以上面的内容是:
(parent_id = 0 AND status = 1)
OR
(parent_id != 0 AND status = 1 AND (sub query that does a count > 0))
因为我们正在使用 orWhere
,所以需要它们。
您遗漏的部分可能是 whereHas
。这使您可以查询关系。在我上面的示例中,我假设反向 belongsTo
关系在您的 Category
模型上设置为 parent()
.
Laravel版本:7.0
这是我的 categories
table.
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('parent_id')->default(0);
$table->string('name');
$table->boolean('status')->default(1);
$table->timestamps();
});
有两个级别的类别。
如果parent_id
是0
,那么就是category
,如果parent_id
不是0
,那么就是subcategory
.
我想得到所有有 status == 1
的 categories & subcategories
& 如果它是 subcategory
,那么它的 parent category's status
应该是 1
.
我制作了Category
模型。
$categories = Category::where('status', 1)->get();
以上查询可以获得parent category's status == 0
的子类别。
如何过滤所有类别和子类别?
谁能帮帮我?
您可以将任务分成两部分。
- 获取所有类别(状态 = 1 且 parent_id = 0)
- 获取所有子类别(status = 1 and parent_id != 0 and parent.status = 1)
$categories = Category::query()
// 1.
->where(function ($query) {
$query->whereStatus(1)->whereParentId(0);
})
// 2.
->orWhere(function ($query) {
$query
->where('parent_id', '!=', 0)
->whereStatus(1)
->whereHas('parent', function ($query) {
$query->whereStatus(1);
});
})
->get();
请记住,PHP 闭包在 SQL 中的工作方式与 ( )
相同。所以上面的内容是:
(parent_id = 0 AND status = 1)
OR
(parent_id != 0 AND status = 1 AND (sub query that does a count > 0))
因为我们正在使用 orWhere
,所以需要它们。
您遗漏的部分可能是 whereHas
。这使您可以查询关系。在我上面的示例中,我假设反向 belongsTo
关系在您的 Category
模型上设置为 parent()
.