正确的解决方案,只根据条件得到一个关系项

时间:2017-12-13 11:49:25

标签: laravel laravel-5 eloquent laravel-5.5 laravel-eloquent

对于我希望获得有效优惠券的产品。一次只能有一张活动优惠券。

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

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将产品交付给应用程序。

从数据库中获取数据后,我现在正在做一些非常难看的事情:

$product['coupon'] = $product->activeCoupons[0];

我这样做,因为我不想在我的JSON中返回一系列activeCoupons。我想退回有效优惠券或null。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

另一种方法是:

$product['coupon'] = $product->activeCoupons()->first();

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

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

答案 1 :(得分:0)

这似乎是您对Laerte的回复所要求的

<div class="dropdown">
  <a id="dropbtn">Menu</a>
  <ul id="dropdown" class="dropdown-content">
    <li>ALL</li>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
    <li>item 4</li>
  </ul>
</div>