2017-07-12 227 views
0

我有以下表Laravel 5. * - 雄辯的多對多關係

USERS = username | email | name 
FOLLOWERS = user_id | follower_id 

當登錄用戶點擊「跟隨」我的代碼,節省了他的身份證內followers.follower_id,以及用戶的ID誰他想跟着保存在followers.user_id裏面。

要查看用戶有多少關注者以及有多少用戶一個用戶下使用:

$followers = Follower::where('user_id', $user->id)->count(); 
$following = Follower::where('follower_id', $user->id)->count(); 

這個效果很好,但我想,以顯示有關一個用戶的追隨者信息。我已經試過如下:

$first_follower = $followers[0]->user->username; 

但它返回用戶未遵循的追隨者。

我想知道我怎樣才能得到關於跟隨信息

用戶模型

protected $fillable = ['username','email','name']; 

public function follow() { 
    return $this->hasMany('Shop\Follower');  
} 

跟隨模式

protected $fillable = ['user_id','follower_id']; 

public function user() { 
    return $this->belongsTo('Shop\User'); 
} 
+0

你應該使用多對多的關係來克服這個 –

回答

0

如果我得到這個權利的追隨者實例User類/模型,所以你不需要一個Follower模型。你可以只定義Many To Many Relationship

在您的用戶模型,你可以添加:

public function followers() 
{ 
    return $this->belongsToMany('Shop\User', 'followers', 'user_id ', 'follower_id'); 
} 

public function following() 
{ 
    return $this->belongsToMany('Shop\User', 'followers', 'follower_id', 'user_id'); 
} 

比你能僅僅通過$user->followers訪問用戶的關注,這將返回一個Laravel Collection$user->following您可以訪問那些在用戶正在關注。

//Get the count of all followers for $user 
$count = $user->followers()->count(); 

//Get the count of all followed by $user 
$count = $user->following()->count(); 

//Get the username of the first follower 
$follower = $user->followers()->first(); 
echo $follower->username; 

//Loop trough all followers 
foreach ($user->followers as $follower) { 
    echo $follower->username; 
} 

定義這種關係可以幫助您節省/刪除追隨者只是使用attach()detach()方法

// The $user will be followed by an user with $followerId 
// A record in the `followers` table will be created with 
// user_id = $user->id and follower_id = $followerId 
$user->followers()->attach($followerId); 

// The $user will stop be followed by an user with $followerId 
$user->followers()->detach($followerId); 

一個側面說明: 有調用followers()方法和調用之間的差異followers屬性。首先將返回BelongsToMany關係,你可以調用其上的所有雄辯查詢生成器方法和以後將返回Collection

/** @var Illuminate\Support\Collection */ 
$user->followers; 

/** @var Illuminate\Database\Eloquent\Relations\BelongsToMany */ 
$user->followers(); 
0

你應該如何實現關係的一個例子,是上面。許多用戶通過關注者表提供了許多用戶。你可能不需要跟隨者模型,因爲你已經有了一個用戶模型。您的代碼將工作經過一番分析和改進,但我會強烈建議更換你做出這樣的事情inuser模型來代替:

public function followers() { return $this->belongsToMany('App\User','followers','user_id','follower_id'); } public function following_users() { return $this->belongsToMany('App\User','followers','follower_id','user_id'); }

比你可以訪問的追隨者$user->followers(這將返回雄辯收集和你將能夠根據laravel docs collection api)和某個像$user->followers[0]

希望我能得到你的答案。