Laravel Eloquent отношения возвращают пустой массив - PullRequest
0 голосов
/ 11 июля 2019

Я использую Eloquent через библиотеку подсветки / базы данных, а не Laravel.

У меня есть таблица пользователей, таблица stripe_customer_ids, где я сохраняю идентификатор клиента полосы, когда Stripe генерирует его, и таблицу user_stripe_subscription, где я сохраняюподробности о подписках.

Мне нужно получить идентификатор подписки пользователя в таблице user_stripe_subscription с данными пользователя в таблице пользователей.

Я попытался изменить многие параметры в параметрах внешнего ключа и локального ключа.следуя документации Laravel, но запрос по-прежнему возвращает пустой массив.

Это отношение, которое я установил в модели User:

public function userStripeSubscription() {
        return $this->hasManyThrough('\App\Models\UserStripeSubscription', '\App\Models\StripeCustomerId', 'user_id', 'stripe_customer_id', 'id', 'id');
    }

В модели StripeCustomerId отношение с моделью Usersetteb by:

public function user() {
        return $this->belongsTo(User::class, "user_id", "id");
    }

и связь с UserStripeSubscription устанавливается с помощью:

public function userStripeSubscriptions() {
        return $this->hasOne(UserStripeSubscription::class, 'stripe_customer_id', 'stripe_customer_id');
    }

В модели UserStripeSubscription есть связь с моделью StripeCustomerId:

public function stripeCustomerId() {
        return $this->belongsTo(StripeCustomerId::class, "stripe_customer_id", "stripe_customer_id");
    }

Очевидно, что таблица правильно заполненапоэтому я ожидаю получить результат с этим кодом:

$user   = User::where('id', $userId)->with('userStripeSubscription')->first();

, но я получаю только массив пользователя и пустой массив, например:

["relations":protected]=>
  array(1) {
    ["userStripeSubscription"]=>
    object(Illuminate\Database\Eloquent\Collection)#40 (1) {
      ["items":protected]=>
      array(0) {
      }
    }
  }

Заранее спасибо за вашу помощь!

1 Ответ

1 голос
/ 11 июля 2019

Второй локальный ключ неверен:

public function userStripeSubscription()
{
    return $this->hasManyThrough(
        '\App\Models\UserStripeSubscription', '\App\Models\StripeCustomerId',
        'user_id', 'stripe_customer_id',
        'id', 'stripe_customer_id'
    );         ^^^^^^^^^^^^^^^^^^
}
...