首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据条件只获取一个关系项的正确解决方案

根据条件只获取一个关系项的正确解决方案
EN

Stack Overflow用户
提问于 2017-12-13 19:49:25
回答 2查看 35关注 0票数 0

对于产品,我想获得有效的优惠券。一次只能有一个有效的优惠券。

我的产品-Modal看起来像这样:

代码语言:javascript
运行
复制
class Product extends Model
{
    public $table_name = 'products';

    protected $hidden = [
        'coupons',
    ];

    public function coupons() {
        return $this->hasMany('App\Models\Coupon', 'dish_id');
    }

    public function activeCoupons() {
        $instance = $this->hasMany('App\Models\Coupon', 'dish_id');
        $instance->getQuery()->where('start', '<', new \DateTime());
        $instance->getQuery()->where('end', '>', new \DateTime());
        return $instance;
    }
}

我提供了一个JSON-API的应用程序的产品。

从数据库获取数据后,我现在正在做一件非常丑陋的事情:

代码语言:javascript
运行
复制
$product['coupon'] = $product->activeCoupons[0];

我这样做是因为我不想在我的JSON中返回一个activeCoupons数组。我想返回有效的优惠券或null。

有没有更好的方法来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2017-12-13 20:10:41

另一种方法是:

代码语言:javascript
运行
复制
$product['coupon'] = $product->activeCoupons()->first();

甚至使用limit。这个想法是:

代码语言:javascript
运行
复制
public function activeCoupons() {
    return $this->hasMany('App\Models\Coupon', 'dish_id');
                ->where('start', '<', new \DateTime());
                ->where('end', '>', new \DateTime())
                ->limit(1);
}
票数 0
EN

Stack Overflow用户

发布于 2017-12-13 21:52:53

这似乎就是你在回复Laerte时所要求的

代码语言:javascript
运行
复制
 public function firstActiveCoupon() {
        return $this->hasOne('App\Models\Coupon', 'dish_id')
         ->where('start', '<', new \DateTime())
         ->where('end', '>', new \DateTime());
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47792296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档