如果变量在laravel中为false,如何隐藏块?

如果变量在laravel中为false,如何隐藏块?,laravel,Laravel,我有一个将变量输出到视图的方法。在视图中,我检查变量是否为true,然后显示所需的块,如果为false,则不显示该块。但出于某种原因,这对我不起作用 @if($mainAlbum) <div class="card"> <a href="{{route('allAlbums', ['id' => $user->id])}}"><h1 class="mt-2 mb-2" style="font-size: 0.9rem; margin-l

我有一个将变量输出到视图的方法。在视图中,我检查变量是否为true,然后显示所需的块,如果为false,则不显示该块。但出于某种原因,这对我不起作用

@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>
      @foreach($mainAlbum as $album)
          <a href="{{route('album', ['id' => $user->id, 'album' => $album->id])}}"><img src="{{$album->cover}}" class="img-fluid"></a>    
      @endforeach
   </div>
@endif
在模板中的
@if()
之前,添加
{{{dd($mainlumb)}}

如果希望块不显示,请检查返回值是否为falsy(即
null
false
0
),并且不是像字符串那样的真实值(即
”、
“false”
“null”
)或
对象
数组


如果您希望它显示,那么请确保它是真实值。

问题是
get()
总是返回一个集合,不管里面是否有相册,因此
@If($mainlumb)
总是真实的

我要做的是:

在控制器中:

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
    
    @if($main相册)
    @恩迪夫
    
  • 您可以去掉
    @foreach
    ,因为您的变量现在将保存模型而不是集合
  • 您的
    @if
    检查现在起作用,因为
    $main album
    将包含模型或空值

  • 你说的是哪个变量?您正在将其中4个传递给视图。此外,您提供的代码不会检查变量是否为真。mainVideo和mainAlbum存在问题
    @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