我正在创建博客类型的应用程序,并在测试中将默认图像插入没有图像的帖子中,并将用户图像插入上载图像的帖子中。默认图像可以正确显示,但我无法在帖子内显示用户图像。我的逻辑是检查帖子中是否有photo_id,如果有,请获取与该photo_id相对应的文件并显示它。照片已正确升级到images文件夹和数据库。向我展示我在做什么错,以便我可以学习的任何帮助将不胜感激。谢谢。
home.blade.php:
@if($posts)
@foreach($posts as $post)
<div class="card" style="margin-top: 20px">
<div class="card-header">
<div>{{$post->user->name}}</div>
<div style="font-size: 10px;">{{$post->created_at->diffForHumans()}}</div>
</div>
<div class="card-body">
<div>{{$post->body}}</div>
<div><img height="200" src="{{$post->photo_id ? $post->file : 'http://placehold.it/400x400'}}" alt=""></div>
</div>
</div>
@endforeach
@endif
Post.php:
class Post extends Model
{
protected $fillable = [
'photo_id',
'body',
'user_id',
];
public function user() {
return $this->belongsTo('App\User');
}
public function photo() {
return $this->morphMany('App\Photo', 'file');
}
}
Photo.php:
class Photo extends Model
{
protected $fillable = [
'file',
];
public function photo() {
return $this->morphTo();
}
}
HomeController.php:
public function index()
{
$posts = Post::all();
return view('home', compact('posts'));
}
}
答案 0 :(得分:0)
在加载关系之前,不能使用该关系。加载照片
SqlTransform
答案 1 :(得分:0)
尝试以下代码。在刀片服务器模板中使用 if 。
@if(!empty($post->photo_id ))
<img height="200" src="{{ asset('/path/to/directory') }}/{{ $post->file }}" alt="">
@else
<img height="200" src="http://placehold.it/400x400" alt="">
@endif
答案 2 :(得分:0)
首先,我看到您只想从photo
方法中得到一个结果,我建议使用morphOne
方法。没有这个,下面的答案应该稍作修改以适应Collection
的{{1}}返回值。
我们可以看到您尝试使用以下方式访问您的照片:
morphMany
但是,在查看您的代码时,$post->file
模型类没有Post
属性。我认为这只是一个错字,您应该像这样检索文件:
file
答案 3 :(得分:0)
如果要将图像保存在存储中,则只有使用以下命令创建指向存储目录的符号链接后,才能访问它:php artisan storage:link
。然后,您将可以访问它。