Я пытаюсь создать простой канал активности, где пользователь может видеть обновления своих друзей.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)
Это не работает, я получаю ту же ошибку. Могу ли я спросить, почему в отношениях есть два пользователя user_id? – salep
Поскольку вы не используете идентификаторы по умолчанию, вам придется переопределить ссылки 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 –
Также почему у вас есть метод usersStatus() в вашем режиме UserStatus. Это должен быть пользователь(). –