Laravel 检查父类别是否有';调用其相关文章时是否未发表?
我使用创建文章类别 拉维:8/拉维嵌套集:5.0.3 表格类别Laravel 检查父类别是否有';调用其相关文章时是否未发表?,laravel,eloquent,laravel-query-builder,laravel-8,Laravel,Eloquent,Laravel Query Builder,Laravel 8,我使用创建文章类别 拉维:8/拉维嵌套集:5.0.3 表格类别 Schema::create('categories', function (Blueprint $table) { $table->increments('id'); NestedSet::columns($table); $table->boolean('publish')->default(true); ... Schema::create('articles
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
NestedSet::columns($table);
$table->boolean('publish')->default(true);
...
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories');
...
表格文章
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
NestedSet::columns($table);
$table->boolean('publish')->default(true);
...
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories');
...
我在类别表中创建了一个分支和一个子分支,如下所示:
news > politics
我还撰写了两篇文章,并将其插入到“新闻”和“政治”分支中
新闻中的第1篇
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
NestedSet::columns($table);
$table->boolean('publish')->default(true);
...
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories');
...
政治中的第2条
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
NestedSet::columns($table);
$table->boolean('publish')->default(true);
...
Schema::create('articles', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned()->nullable();
$table->foreign('category_id')->references('id')->on('categories');
...
一切正常
现在我有一个场景。我想得到所有的文章,只有在出版类别。(publish=1) 我试试这个:
$query = \App\Article;
$query->where(function($query)
{
$query->whereHas('category' , function ($query) {$query->where('publish' , true ); });
});
但是,此代码仅适用于当前文章类别(不适用于该类别的父级)
让我用一个例子来解释更多
“新闻”中的pulish
为假。(pulish=0
)
政治中的pulish是正确的。(pulish=1
)
现在,我想获取其类别中包含(pulish=1
)的所有文章。上面的查询代码返回我“article2”我希望没有文章返回给我。因为即使“politics”是publish=1
,它的父项(news)也是publish=0
,所以相关文章不应该发表。如何更改查询代码以支持父级(甚至是其顶级父级)