Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 检查父类别是否有';调用其相关文章时是否未发表?_Laravel_Eloquent_Laravel Query Builder_Laravel 8 - Fatal编程技术网

Laravel 检查父类别是否有';调用其相关文章时是否未发表?

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

我使用创建文章类别

拉维:8/拉维嵌套集:5.0.3

表格类别

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
,所以相关文章不应该发表。如何更改查询代码以支持父级(甚至是其顶级父级)