2015-09-05 4 views
0

Я пытаюсь создать простой канал активности, где пользователь может видеть обновления своих друзей.Laravel Eloquent activity feed

Я имею дело с тремя таблицами. 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 

МОДЕЛИ

пользователя Модель

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

Поскольку вы не используете идентификаторы по умолчанию, вам придется переопределить ссылки local_key и foreign_key в формате $ this-> hasMany ('App \ Models \ UserStatus,' foreign_key ',' local_key '). Теперь, поскольку ваши foreign_key и local_key являются user_id. http://laravel.com/docs/5.1/eloquent-relationships#one-to-many –

+0

Также почему у вас есть метод usersStatus() в вашем режиме UserStatus. Это должен быть пользователь(). –