我正在使用此软件包: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帐户功能中看到的那样,我访问该主题的方式就是它的名称。
我如何知道Authtenticated用户的活动嫌疑人?我想通过DB上的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
正如您所看到的,没有任何属性可以获取信息,因此我不确定我是否正确使用此关系。
答案 0 :(得分:1)
这是Laravel的魔力。
通过调用Auth :: user()获取用户模型,因此您已经拥有了所需的相关模型。经过身份验证的用户。
现在在Model-Definition中你可能有一个返回相关模型的方法订阅。 (您可能为'Pro'参数添加了一些逻辑。)
这里的Laravel是在考虑到配置约定的情况下开发的,并且知道表中实际要查找的行。所以你需要的是每个表中的'id',并且由于关系是持有订阅的表中的'user_id'。有一种方法可以用不同的方式定义。以下是文档:https://laravel.com/docs/5.4/eloquent-relationships
所以你从相关用户那里得到了计划,我在这里看不到任何不好的东西。
===
您使用$ user-&gt;订阅但请改为->subscriptions()
(注意复数's')。 使用循环(或 - &gt; first()),因为您获得了计划而不是一个计划
现在你总是传递'Pro',但经过身份验证的用户现在可能订阅了Pro-Plan,因此返回null。订阅返回hasMany关系。从那里/没有尝试/你可以循环结果并获得计划的名称或任何你需要的。注意:它是一个hasMany,尽管用户可能只订阅了一个订阅。所以你需要循环或得到第一个结果。