为了账号安全,请及时绑定邮箱和手机立即绑定

在 laravel 中显示数据库中的一张图像

在 laravel 中显示数据库中的一张图像

PHP
SMILET 2023-05-26 09:25:30
我在 Laravel 中有两张桌子惹兰斯jalan_images在一个 id_jalan 中可以有很多图像,我的关系是这样的街头模特// Model Jalanpublic function jalanImage(){    // return $this->hasMany('App\JalanImage', 'id_jalan');    return $this->hasMany(JalanImage::class, 'id_jalan');}public function firstImage(){    // return $this->hasOne('App\JalanImage', 'id_jalan');    return $this->hasOne(JalanImage::class, 'id_jalan');}模特街景// Model JalanImagepublic function jalan(){    // return $this->belongsTo('App\Jalan', 'id_jalan', 'id');    return $this->belongsTo(Jalan::class, 'id_jalan', 'id');}我想在我的控制器中显示标题、created_at 和每个 id_jalan 中的第一张图像等数据,以显示这样的数据路径控制器// JalanControllerpublic function jalan(){    $jalan  = Jalan::with('firstImage')->orderBy('created_at', 'DESC')->get();    return view('jalan.all', ['jalan' => $jalan]);    // dd($jalan->toArray());}在我看来,每个 id_jalan 的第一张图片没有显示,我的看法是这样的叶片视图@foreach($jalan as $row)   <div class="post-item clearfix">       <table border="0">          <tr>            <td width="170px">               <a href="#">                  <img src="{{ asset('uploads/jalan/' .$row->first_image) }}" alt="" class="img-fluid" width="150px"></td>               </a>               <td>                  <h4><a href="#">{{ $row->title }}</a></h4>                  <i class="icofont-wall-clock"></i> <time>{{ date('d F Y', strtotime($row->created_at)) }}</time>                   <p style="color: #F3591F">{{ $row->category }}</p>                </td>             </tr>           </table>         </div>  @endforeach当我用dd($jalan->toArray());显示它时 在我的控制器中,显示了 first_image。如何解决?谢谢
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您应该遵循 Laravel(尤其是 Eloquent)关于命名约定的建议和最佳实践。这意味着你的gallery_images表应该有gallery_id字段而不是你在那里的内容。信不信由你,那样你会跳过很多非受迫性错误和问题。我将让您回答我将如何代替您:


// \App\Gallery::class

class Gallery extends Model

{

    public function galleryImages()

    {

        return $this->hasMany(GalleryImage::class);

    }


    public function firstGalleryImage()

    {

        return $this->hasOne(GalleryImage::class);

    }

}


// \App\GalleryImage::class

class GalleryImage extends Model

{

    public function gallery()

    {

        return $this->belongsTo(Gallery::class);

    }

}

基本上,您可以根据需要在模型中设置返回特定关系的方法。在Gallery::class这里,您可以看到我已经设置了一个关系,它将只返回该画廊的第一张图片。在控制器中你会调用它


public function someControllerMethod()

{

    $gallery = Gallery::with(['firstGalleryImage'])->first();

    // or

    $galleries = Gallery::with(['firstGalleryImage'])->get();

}

现在返回的对象$gallery或集合$galleries将只携带第一张图像相关。在您的情况下(如果您不想更改字段名称),您需要遵循有关如何将另一个模型的键设置为方法参数的文档。


查看完整回答
反对 回复 2023-05-26
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

你可以使用 Laravel 的 Eloquent ORM(Eager Loading),这里是一个单一图像(图像)和多个图像(媒体)关系的例子。


    public function media()

    {

        return $this->hasMany(Media::class, 'foreign_key', 'local_key');

    }


    public function defaultMedia()

    {

        return $this->hasOne(Media::class, 'foreign_key', 'local_key');


    public function image()

    {

        return $this->defaultMedia();

    }


查看完整回答
反对 回复 2023-05-26
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信