【发布时间】:2018-09-29 08:33:18
【问题描述】:
我有一个名为 random_img 的数据库表。里面有 10 行,10 张图片。
我将从 public/images/random 中提取图像
我想使用数据库,所以我可以将循环设置为 Random take(1)。我想在我的英雄形象中使用。 (每次页面刷新都会有新图片)
我应该将我的数据库查询放在哪里,以便在全球范围内使用它?或者我如何使用我的RandomImgsController 以便在全球范围内使用它?
我创建了一个路由文件,因此我可以在需要时将其用作包含。
路线:
Route::post('/layouts/inc/random-img','RandomImgsController@randomimg')->name('random-img');
包括:
@include('layouts.inc.random-img')
内含:
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
RandomImgsController:(这应该放在哪里,以便我可以全局使用)
public function randomimg()
{
$randomimg = DB::table('randomimg')->orderBy(DB::raw('RAND()'))->get();
return view('random-img',compact('randomimg'));
}}
这是我希望在我网站的每个页面上实现的目标:
@php
$randomimg = DB::table('randomimg')->orderBy(DB::raw('RAND()'))->get()->take(1);
@endphp
@foreach ($randomimg as $rand)
<span class="hero-image">
<img src="/images/random/{{$rand->file_name}}" class="img--max--hero blur-img">
</span>
@endforeach
什么是更清洁的方法?
更新:
我现在可以在所有视图中访问images DB,但我有一个问题。
在我的App\Http\ViewComposer\ImageComposer.php 文件中,我有这个:
public function compose(View $view)
{
$view->with('foo', Image::inRandomOrder()->get()->take(1));
}
在任何视图中,我都可以使用 {{$foo}} 从图像表中获取随机行,但数据以这样的字符串形式出现:
[{"id":10,"alt":"图片替代标签","title":"图片标题","file_name":"10.jpg"}]
当我尝试只抓取像这样的单个列时 {{$foo->file_name}}
我得到错误:
此集合实例上不存在属性 [file_name]。
我怎样才能像这样抓取单个列:{{$foo->alt}}、{{$foo->title}} 和 {{$foo->file_name}},然后在我的视图中干净地输出它们?例如,我需要 {{$foo->file_name}} 像这样渲染:5.jpg。
更新 2:
我想到了。必须使用@foreach,因为我使用的是get() 方法。
@foreach($foo as $f)
{{$f->file_name}}
@endforeach
仍然想知道是否有没有 get() 方法的方法。不过这会起作用。
【问题讨论】:
标签: php laravel laravel-5 laravel-5.5