我有两张桌子,如下:
产品(id,name)
优惠券(id,product_id *,价值,开始,到期)
...使用我的JSON API,我想返回所有产品。如果现在有有效的有效优惠券,也应该退回。
目前我只得到这个JSON结果:
[{
id: 1,
name: 'A',
coupons: [
{ ...},
{ ...},
]
}]
但我想得到这样的东西:
[{
id: 1,
name: 'A',
coupon: { ...}
}]
我可以"预处理"我在控制器中查询的结果并手动设置优惠券属性。但也许有更聪明的方法来解决这个问题?我可以在Product-model中实现coupon()函数来处理这个吗?
修改
现在这个模型使我的代码更清洁了一些:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
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;
}
}
但现在,我需要手动设置
$product['coupon'] = $product->activeCoupons[0]
模型的activeCoupon函数是否可能不返回数组?它应该只返回一个对象(不是数组中的一个对象)。
答案 0 :(得分:2)
如果每个产品只附加一张优惠券 在模型中
public function products()
{
return $this->hasOne('App\coupons');
}
public function coupons()
{
return $this->belongsTo('App\products');
}
并在控制器中
public function allProducts(){
$products = products::orderBy('id', 'ASC')->with('coupons')->get();
return $products
}