使用Laravel从数据库中获取随机图像

时间:2019-04-05 20:49:59

标签: php html laravel

我有一个包含所有图像的数据库。我想在视图中显示4张图像,并将它们设置为“随机”,以便每次刷新时都会显示新图像。

这通常是非常基本的,但是我需要为每个图像使用不同的类名,以免使我失望。

这是我的控制人:

$randpics = Pic::inRandomOrder()
->where('status', 'Active')
->limit(4)
->get();

return view('page.index',compact('randpics'));

这是我的视图:(这给了我4次相同的随机图像)我希望PHP逻辑可以循环4次,为我提供4张不同的图像,但事实并非如此。 / p>

我什至尝试用4个不同的变量名将其写入4次不同的时间,但仍然只能得到4张相同的图像。

   @foreach($randpics as $randpic)
    @php
      $cin = $randpic->cin ;
      $mi = $randpic->my_img;
      $rand = (asset("storage/images/cdp/$cin/profile-img/$mi"));
    @endphp
   @endforeach

 <div class="pic-grid">
   <div class="box-a" style="background-image: url({{ $rand }}"></div>
   <div class="box-b" style="background-image: url({{ $rand }}"></div>
   <div class="box-c" style="background-image: url({{ $rand }}"></div>
   <div class="box-d" style="background-image: url({{ $rand }}"></div>
 </div>

我意识到正确地做到这一点在我看来应该像这样...

 @foreach($randpics as $randpic)
   <div class="box-a" style="background-image:url({{ asset("storage/images/cdp/$randpic->cin/profile-img/$randpic->my_img") }}")>
   </div>
 @endforeach

但是由于4个不同的类,除非我可以以某种方式向4个输出的图像中的每一个添加不同的类,否则该循环将无法工作。 (box-a, box-b, box-c & box-d

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

首先,您需要在foreach循环中输出<div>

@foreach($randpics as $randpic)
@php
  $cin = $randpic->cin ;
  $mi = $randpic->my_img;
  $rand = (asset("storage/images/cdp/$cin/profile-img/$mi"));
@endphp
<div ...>
@endforeach

接下来,要处理分配不同的类,您可以在数组中传递4个类,并在循环中引用它们:

$classes = ["box-a", "box-b", "box-c", "box-d"];
return view('page.index',compact('randpics', 'classes'));

@foreach($randpics as $index => $randpic)
...
<div class="{{ $classes[$index] }}"...>
@endforeach

因此,将它们放在一起:

Controller.php:

$randpics = Pic::inRandomOrder()
->where('status', 'Active')
->limit(4)
->get();

$classes = ["box-a", "box-b", "box-c", "box-d"];

return view('page.index',compact('randpics', 'classes'));

View.blade.php:

<div class="pic-grid">
  @foreach($randpics as $index => $randpic)
  @php
  $cin = $randpic->cin ;
  $mi = $randpic->my_img;
  $rand = (asset("storage/images/cdp/$cin/profile-img/$mi"));
  @endphp
  <div class="{{ $classes[$index] }}" style="background-image: url({{ $rand }}"></div>
  @endforeach
</div>