Я пытаюсь создать небольшую функцию для создаваемого веб-сайта, которая позволит вам следить за другими пользователями, а затем ваша панель будет заполнена файлами, которые они загружают в указанном порядке.(Вы можете сравнить его с YouTube. Вы подписываетесь на канал, и на странице подписки вы видите каждое видео по порядку по дате подписчиков.)
Это структура моей модели (она упрощена только для показанеобходимые значения, чтобы это работало).
Follow
- my_id (Это ваш идентификатор)
- user_id (Это идентификатор пользователя, которого вы 'повторяю)
Пользователь
- id (идентификатор пользователя)
Файлы
- user_id (Theидентификатор пользователя, который загрузил файл)
- путь (путь к файлу)
Сейчас я много чего пробовал, чтобы получить данные:
Follow::where('me_id', '=', Auth::user()->id)->get()->all()->files;
Follow::where('me_id', '=', Auth::user()->id)->get()->files;
единственное, что, кажется, работает (но это только для 1 подписки):
Follow::where('me_id', '=', Auth::user()->id)->first()->files;
Было бы удивительно, если бы кто-то мог видеть, что я делаю неправильно.
В моей Follow.php
моделиУ меня он подключен вот так.
class Follow extends Model
{
protected $fillable = ['user_id', 'me_id'];
public function me()
{
return $this->belongsTo(User::class, 'id', 'me_id');
}
public function user()
{
return $this->belongsTo(User::class, 'id', 'user_id');
}
public function files()
{
return $this->hasManyThrough(
'App\File', //The model I'm trying to reach
'App\User', //The model I need to go through to reach the files
'id', //This is where I'm going wrong I think
'user_id', //Same here
'user_id', //Same here
'id' //Same here
);
}
}
РЕДАКТИРОВАТЬ:
У меня работает, делая 2 отдельных вызова базы данных.Но возможно ли это за один звонок?См. Код внизу.
public function following(Request $request)
{
$follows = Follow::where('me_id', '=', Auth::user()->id)->get()->all();
$userIds = [];
foreach($follows as $key => $follow) {
$userIds[] = $follow->user_id;
}
$files = File::where('visible', '=', '1')->whereIn('user_id', $userIds)->orderBy('created_at', 'desc')->paginate(12)->onEachSide(3);
}