2017-09-13 69 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