2015-09-05 195 views
0

我想創建一個簡單的活動飼料,用戶可以看到他的朋友的更新。Laravel雄辯活動飼料

我處理三個表。 user_status,友誼和用戶。

用戶表

user_id 
name 
email 
..(a regular users table, nothing special) 

友誼表

friendship_id 
friend_one (Foreign key from users table) 
friend_two (Foreign key from users table) 

user_status表

status_id 
user_id (foreign key from users table) 
status 
date 

MODELS

用戶模型

public function friends() { 
    return $this->belongsToMany('App\Models\User', 'friendship', 'friend_one', 'friend_two'); 
} 

public function status() { 
     return $this->hasMany('\App\Models\UserStatus','status_id'); 
    } 

UserStatus模型

public function usersStatus() { 
    return $this->belongsTo('\App\Models\User','user_id'); 
} 

FeedController.php

class FeedController extends Controller 
{ 
    public function index() { 

     $friends = Auth::user()->friends; 


     return view('frontend.feed.index') 
      ->with('friends',$friends); 
    } 

} 

使用下面的查詢,我可以得到一個用戶的好友。我也可以輕鬆獲得特定用戶的狀態更新,但我不知道如何僅列出特定用戶的狀態。

@foreach($friends as $friend) 
    {{$friend->email}} 
@endforeach 

下面的一個不起作用。

查看

@foreach($friends as $friend) 
    @foreach($friend->status as $status) 
     {{$status->status}} 
    @endforeach 
@endforeach 


Invalid argument supplied for foreach() (View: /Applications/MAMP/htdocs/master/resources/views/frontend/feed/index.blade.php) 

回答

1

我認爲這個問題是您的foreign_key參考

public function status() { 
     return $this->hasMany('\App\Models\UserStatus','status_id'); 
} 

更改爲:

public function status() { 
     return $this->hasMany('\App\Models\UserStatus', 'user_id', 'user_id'); 
} 

,它應該工作。

+0

它不起作用,我得到相同的錯誤。請問爲什麼在關係中有兩個user_id? – salep

+1

既然你不使用默認的id,你將不得不重寫你的local_key和foreign_key引用格式 $這個 - >的hasMany(「應用程序\型號\ UserStatus,‘foreign_key’,‘local_key’)。現在因爲你的foreign_key和local_key都是user_id。 http://laravel.com/docs/5.1/eloquent-relationships#one-to-many –

+0

還有,爲什麼你在你的UserStatus模式usersStatus()方法。它應該是user()。 –