2017-09-13 32 views
0

使用这个软件包的进程:https://github.com/gerardojbaez/laraplans和文档有点混乱。如何在控制器上使用一对多关系。 Laravel 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特质那里有这似乎解决我的问题的函数:

/** 
* 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:

enter image description here

正如你所看到的,没有属性,从这样获取信息我不确定我是否正确使用这种关系。

回答

1

这就是Laravel的魔力。

您通过调用Auth :: user()来获取用户模型,以便您已经拥有您正在查找的相关模型。认证用户的身份。

现在模型的定义里面,你可能有它返回相关模型的方法订阅。 (您可能为'Pro'参数添加了一些逻辑)。

这里Laravel与约定优于配置的开发思想和认识真正寻找这些表中的行。所以你需要的是每个表中的'id',并且由于表中持有订阅的表中的'user_id'关系。大小写有不同的定义方法。这里是DOC:https://laravel.com/docs/5.4/eloquent-relationships

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

===

您使用$用户>订阅,但做一个->subscriptions()代替(注意复数 'S')。使用循环(或 - >第()),因为你的计划,而不是一个计划

现在你总是在通过“专业”,但经过验证的用户现在可能已经订阅了临计划,因此回报空值。订阅返回hasMany关系。从那里/未尝试/您可以循环查看结果并获取计划名称或您需要的任何名称。注意:这是一个hasMany,尽管用户可能只订阅了一个订阅。所以你需要循环或获得第一个结果。

+0

哦,只要看到你没有定义关系,而是利用这个特点从包:https://github.com/gerardojbaez/laraplans/blob/master/src/LaraPlans/Traits/PlanSubscriber.php – hogan

+0

“PRO”实际上是数据库上的订购计划的名称。这就是包裹识别您所指的计划的方式。我怎样才能使这个价值与经过验证的用户动态合作? –

+0

已添加到解决方案中。 – hogan