Проблема в том, что get()
всегда возвращает коллекцию, не имеет значения, есть внутри альбом или нет, поэтому @if($mainAlbum)
всегда будет правдой.
Я бы сделал следующее :
В вашем контроллере:
public function index($id) {
// switch 'find' with 'findOrFail' this way it will throw a 404 if no user is found
$user = User::findOrFail($id);
$posts = $user->profile()->orderBy('created_at', 'desc')->paginate(2);
// use 'first' instead of 'get', so it will return a model or null instead of a collection
$mainVideo = $user->profileVideo()->orderBy('created_at', 'desc')->first();
$mainAlbum = $user->profileAlbums()->orderBy('created_at', 'desc')->first();
return view('profile.profile', compact('user', 'posts', 'mainVideo', 'mainAlbum'));
}
- Вместо использования
find()
используйте findOrFail()
, поэтому страница выдаст ошибку 404, если пользователь не может быть найден. - Поскольку вы используете
limit(1)
, вы можете использовать first()
вместо get()
, first()
вернет модель или значение null, get()
всегда будет возвращать коллекцию, независимо от того, содержит ли она модель или нет.
На ваш взгляд:
@if($mainAlbum)
<div class="card">
<a href="{{ route('allAlbums', ['id' => $user->id]) }}">
<h1 class="mt-2 mb-2" style="font-size: 0.9rem; margin-left: 5px; color: black;">
Плейлисты <img src="{{ asset('img/right.png') }}" width="11">
</h1>
</a>
<a href="{{ route('album', ['id' => $user->id, 'album' => $mainAlbum->id]) }}">
<img src="{{ $mainAlbum->cover }}" class="img-fluid">
</a>
</div>
@endif
- Вы можете избавиться от
@foreach
, так как ваша переменная теперь будет содержать модель вместо collection - Ваш
@if
чек теперь работает, так как $mainAlbum
будет содержать модель или ноль