Laravel:仅当关系和关系内的关系存在时,雄辩地返回结果

我有三个模型:ProductType、ProductSubtype 和 ProductSubtypeCategory


产品类型.php


class ProductType extends Model{

    // A product type has many subtypes

    public function product_subtypes(){

        return $this->hasMany(ProductSubtype::class);

    }

}

产品子类型.php


class ProductSubtype extends Model{

    // Each product subtype belongs to a type

    public function product_type(){

        return $this->belongsTo(ProductType::class);

    }

    // A product subtype has many categories

    public function product_subtype_categories(){

        return $this->hasMany(ProductSubtypeCategory::class);

    }

}

产品子类型类别.php


class ProductSubtypeCategory extends Model{    

    // Each cateogory belongs to a subtype

    public function product_subtype(){

        return $this->belongsTo(ProductSubtype::class);

    }

}

我只想要其中存在产品子类型和子类型类别的产品类型。到目前为止我已经尝试过这个


return ProductType::has('product_subtypes', function ($query){

            $query->has('product_subtype_categories');

        })->get();

有没有任何官方方法可以从这种嵌套关系中获得我想要的结果?


GCT1015
浏览 88回答 1
1回答

qq_遁去的一_1

您所做的事情是正确的,但可以简化。更改以下内容:return ProductType::has('product_subtypes', function ($query){     $query->has('product_subtype_categories'); })->get();到:return ProductType::has('product_subtypes.product_subtype_categories')->get();来自文档:访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,假设您想要检索至少包含一条评论的所有博客文章。为此,您可以将关系的名称传递给has和orHas 方法:// Retrieve all posts that have at least one comment... $posts = App\Post::has('comments')->get();嵌套has语句也可以使用“点”表示法构建。例如,您可以检索至少有一条评论和投票的所有帖子:// Retrieve posts that have at least one comment with votes... $posts = App\Post::has('comments.votes')->get();
打开App,查看更多内容
随时随地看视频慕课网APP