У меня есть модель Member в моем приложении Laravel и в модели:
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_memberships и member_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
Что мне здесь не хватает?
Я не. Если это поможет, у member_promo_codes есть другой внешний ключ, promo_code_id, который соединяет его с таблицей с именем promo_codes. Но я не понимаю, как это может повлиять на это.
promo_codes Используйте with(['active_memberships','promo_codes']) затем (обратите внимание на с)
Нет, это не должно быть проблемой. Просто для отладки попробуйте следующее: $member = Member::with('promo_code')->find($id); и посмотрите, получите ли вы $member['promo_code'] ?
@cbaconnier, что ты сказал? Вы говорите, что использование 's' решит проблему? :)
@Learner В этом запросе я вижу массив promo_code! Как вы думаете, какое объяснение может быть? Является ли мой синтаксис неправильным для наличия нескольких withs?
@jovan, нет, с тобой все в порядке, попробуйте решение, которое я предоставил ниже в качестве ответа, посмотрите, работает ли оно
@Learner Неважно, я думаю, что мой пустой желудок заставляет меня расплавить мозг :(
@cbaconnier классный
@jovan, я так понимаю, мое решение сработало?






Попробуйте изменить методы отношений на следующие:
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, потому что это по умолчанию, и попытайтесь указать отношение, используя пространство имен, поскольку это самый простой способ определить отношения.
Посмотрите, работает ли тогда запрос контроллера?
У вас случайно нет столбца с названием
promo_codeвmembersтаблице?