Eloquent的“ with”对于一种关系不会返回任何内容,而对于另一种关系则返回任何结果

时间:2019-02-25 10:29:03

标签: laravel eloquent

我的Laravel应用程序和模型中都有一个Member模型:

public function active_memberships() {
    return $this->hasMany(MemberMembership::class, 'member_id', 'id')->where(function($query) {
        $query->where('ends_at', '>', Carbon::now());
    });
}

public function promo_code() {
    return $this->hasMany(MemberPromoCode::class, 'member_id', 'id');
}

member_membershipsmember_promo_codes表均具有member_id作为外键。但是,如果我这样做:

$member = Member::with(['active_memberships','promo_code'])->find($id);

我在active_memberships中得到了$member数组,但没有promo_code

因此,$member['active_memberships']打印出一个数组。但是$member['promo_code']给出了一个错误:

Undefined index: promo_code

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

尝试将您的关系方法更改为以下方法:

public function active_memberships() {
    return $this->hasMany('\App\MemberMembership', 'member_id')->where(function($query) {
        $query->where('ends_at', '>', Carbon::now());
    });
}

public function promo_code() {
    return $this->hasMany('\App\MemberPromoCode', 'member_id');
}

您不需要将第三个参数作为id传递,因为默认情况下,请尝试使用命名空间提供关系,因为这是定义关系的最基本方法。

看看Controller查询是否行得通?