php 如何在Laravel中根据与模型相关的最新示例过滤模型

im9ewurl  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(106)

为了简化,我有两个模型,ProductProductStatus。为了记录产品状态的历史,它们与一对多关系绑定,Product是父节点。
现在的问题是:如何根据ProductStatus绑定的最新状态查询Product型号?
假设我想查询一个状态为“Approved”的产品,那么大致的想法可能是这样的:

// The status model has a field called status
Product::whereHas("statuses", fn($q) => $q->whereLatest("status", "Approved"))

注意:我需要在构建器示例中使用此代码,因为我假设我要查询大量数据。
我该怎么做?

bjp0bcyl

bjp0bcyl1#

我建议在Product模型上为当前状态创建一个属性,并创建一个模型观察器来监视此属性的更改,并在必要时创建一个ProductStatus。由于您将查询大量数据,因此这将更高效,更快。

xt0899hw

xt0899hw2#

在产品模型中创建作用域

public function scopeStatus(Builder $query, $status)
{
    return $query->relation()->where('status', $status)->latest();
}

用途:

Product::status('Approved')->get();

相关问题