2017-12-13 7 views
0

アクティブなクーポンを取得したい製品については、一度に使用できるクーポンは1つだけです。条件に基づいて1つの関連項目しか取得できない解決策

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を返したい。

これを行うより良い方法はありますか?

答えて

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); 
} 
+0

へのお返事からを求めて何のようだ、非常にきれいなものではありません私は思って..そして、2番目のアプローチではまだ配列を取得しています。配列内のアイテムは1つだけですが、それでもJSONの配列です... – rakete

+0

残念ながら、結果として必要なものはわかりません。 – Laerte

0

これは、あなたが、私はまだそれを取得した後、各項目を反復処理する必要が最初のものでラアート

public function firstActiveCoupon() { 
     return $this->hasOne('App\Models\Coupon', 'dish_id') 
     ->where('start', '<', new \DateTime()) 
     ->where('end', '>', new \DateTime()); 
    } 
関連する問題