为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
GCT1015 2023-09-15 21:19:00
我有三个模型:ProductType、ProductSubtype 和 ProductSubtypeCategory产品类型.phpclass ProductType extends Model{    // A product type has many subtypes    public function product_subtypes(){        return $this->hasMany(ProductSubtype::class);    }}产品子类型.phpclass 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);    }}产品子类型类别.phpclass 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();有没有任何官方方法可以从这种嵌套关系中获得我想要的结果?
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您所做的事情是正确的,但可以简化。

更改以下内容:

return ProductType::has('product_subtypes', function ($query){ 
   $query->has('product_subtype_categories');
})->get();

到:

return ProductType::has('product_subtypes.product_subtype_categories')->get();

来自文档:

访问模型的记录时,您可能希望根据关系的存在来限制结果。例如,假设您想要检索至少包含一条评论的所有博客文章。为此,您可以将关系的名称传递给hasorHas 方法:

// 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();


查看完整回答
反对 回复 2023-09-15
  • 1 回答
  • 0 关注
  • 87 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信