【问题标题】:How to use one-to-many relationship on controller. Laravel LaraPlans如何在控制器上使用一对多关系。 Laravel LaraPlans
【发布时间】:2018-02-21 12:59:45
【问题描述】:

我正在使用这个包:https://github.com/gerardojbaez/laraplans,文档有点混乱。

用户的信息可以从订阅计划中获取,但反之则不行,所以我在尝试使用 2 种(或更多)订阅计划时遇到问题。

我的 HomeController 上有这个:

public function account()
{
    $user = Auth::user();

    $plan = $user->subscription('Pro');

    return view('auth.profile')->with('user', $user)->with('plan', $plan);
}

这在我看来

<li class="list-group-item">
    {{ $plan->ends_at }}
</li>
<li class="list-group-item">
    {{ $plan->user->name }}
</li>

从这里您可以了解模型的连接方式,现在,您可以在 HomeController 帐户功能上看到我访问订阅的方式是通过它的名称。

我如何知道经过身份验证的用户的有效订阅?我在想通过数据库上 plan_suscriptions 表上的 user_id,但是当我尝试访问它时,我总是得到 NULL。

我认为我的逻辑方法有缺陷。

在包装上的 PlanSubscriber Trait 中有一个似乎可以解决我的问题的功能:

/**
 * Get user plan subscription.
 *
 * @return \Illuminate\Database\Eloquent\Relations\HasOne
 */
public function subscriptions()
{
    return $this->hasMany(config('laraplans.models.plan_subscription'));
}

但是当使用 dd();在我的控制器上使用该功能时,我得到以下信息:

功能:

public function account()
{
    $user = Auth::user();

    $plan = $user->subscriptions();

    dd($plan);
}

DD:

如您所见,没有可以从中获取信息的属性,所以我不确定我是否正确使用了这种关系。

【问题讨论】:

    标签: php laravel laravel-5.4


    【解决方案1】:

    这就是 Laravel 的魔力。

    您通过调用 Auth::user() 获取用户模型,因此您已经拥有您正在寻找的相关模型。已通过身份验证的用户。

    现在在模型定义中,您可能有一个返回相关模型的方法订阅。 (您可能为“Pro”参数添加了一些逻辑)。

    这里的 Laravel 在开发时考虑了约定优于配置,并且知道实际要查找表中的哪些行。因此,您需要的是每个表中的“id”,并且由于关系,包含订阅的表中的“user_id”。有一种方法可以以不同的方式定义它以防万一。这是文档:https://laravel.com/docs/5.4/eloquent-relationships

    所以你从相关用户那里得到了计划,我看不出有什么不好的地方。

    ===

    您使用 $user->subscription 但改为使用-&gt;subscriptions()(注意复数“s”)。 使用循环(或 ->first()),因为您得到的是计划而不是一个计划

    现在您总是传入“Pro”,但经过身份验证的用户现在可能订阅了 Pro-Plan,因此返回 null。订阅返回 hasMany 关系。从那里/未尝试/您可以遍历结果并获取计划的名称或您需要的任何名称。注意:它是一个 hasMany,尽管用户可能只订阅了一个订阅。所以你需要循环或者得到第一个结果。

    【讨论】:

    • 哦,只是看到你没有定义关系,而是使用包中的这个特征:github.com/gerardojbaez/laraplans/blob/master/src/LaraPlans/…
    • 'Pro' 字面意思是数据库上订阅计划的名称。这就是包裹识别您所指的计划的方式。如何使该值与经过身份验证的用户动态协作?
    • 已添加到解决方案中。
    猜你喜欢
    • 2018-06-11
    • 1970-01-01
    • 2017-04-16
    • 2018-06-15
    • 2021-03-21
    • 2015-10-26
    • 1970-01-01
    • 2018-09-27
    • 2017-10-10
    相关资源
    最近更新 更多