Laravel 根据条件仅获取一个相关项(1:n)的最佳实践
我有两张桌子,像这样:Laravel 根据条件仅获取一个相关项(1:n)的最佳实践,laravel,laravel-5,Laravel,Laravel 5,我有两张桌子,像这样: [{ id: 1, name: 'A', coupon: { ...} }] 产品(id、名称) 优惠券(id、产品id*、价值、开始、到期) 。。。使用JSON API,我希望返回所有产品。如果现在有一个有效的活动优惠券,这也应该被退回 目前我只得到这个JSON结果: [{ id: 1, name: 'A', coupons: [ { ...}, { ...}, ] }] 但我想得到这样的东西: [{ id: 1, name: 'A', c
[{
id: 1,
name: 'A',
coupon: { ...}
}]
产品(id、名称)
优惠券(id、产品id*、价值、开始、到期)
。。。使用JSON API,我希望返回所有产品。如果现在有一个有效的活动优惠券,这也应该被退回
目前我只得到这个JSON结果:
[{
id: 1,
name: 'A',
coupons: [
{ ...},
{ ...},
]
}]
但我想得到这样的东西:
[{
id: 1,
name: 'A',
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;
}
}
模型的函数ActiveCouncil是否可能不返回数组?它应该只返回一个对象(不是数组中的一个对象)。如果每个产品只附带一个优惠券 模型中 和在控制器中
public function allProducts(){
$products = products::orderBy('id', 'ASC')->with('coupons')->get();
return $products
}
如果每个产品仅附有一张优惠券 模型中 和在控制器中
public function allProducts(){
$products = products::orderBy('id', 'ASC')->with('coupons')->get();
return $products
}
不,那很容易。问题是,一个产品附带了多个优惠券,但一次只能有一个活动优惠券(因为起始日期和终止日期)。可能您的产品与唯一活动优惠券(其状态为“活动”)有“hasOne”关系,那么这是可能的。和所有的政变都有很多关系不,那很容易。问题是,一个产品附带了多个优惠券,但一次只能有一个活动优惠券(因为起始日期和终止日期)。可能您的产品与唯一活动优惠券(其状态为“活动”)有“hasOne”关系,那么这是可能的。与所有优惠券都有许多关系