用户帖子不会发布,但默认图片会发布

时间:2018-10-25 15:51:41

标签: php laravel

我正在创建博客类型的应用程序,并在测试中将默认图像插入没有图像的帖子中,并将用户图像插入上载图像的帖子中。默认图像可以正确显示,但我无法在帖子内显示用户图像。我的逻辑是检查帖子中是否有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'));
    }
}

4 个答案:

答案 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。然后,您将可以访问它。