Laravel雄辩的关系hasonethrough返回一个空数组

时间:2019-07-11 12:46:18

标签: php eloquent foreign-keys relationship

我通过库illuminate / database使用Eloquent,而不是Laravel。

我有一个用户表,一个Stripe_customer_ids表和一个user_stripe_subscriptions表,在该表中,我存储条带客户ID。

我需要在user_stripe_subscriptions表中检索用户的订阅ID,并在users表中检索用户的数据。

我尝试根据Laravel文档更改外键和本地键选项中的许多选项,但查询仍然返回空数组。

这是我在用户模型中设置的关系:

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

在StripeCustomerId模型中,通过以下方式设置与用户模型的关系:

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 个答案:

答案 0 :(得分:1)

第二个本地密钥不正确:

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