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

我在 Laravel 中有两张桌子

  • 惹兰斯

  • jalan_images

在一个 id_jalan 中可以有很多图像,我的关系是这样的

街头模特

// Model Jalan

public 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 JalanImage

public function jalan()

{

    // return $this->belongsTo('App\Jalan', 'id_jalan', 'id');

    return $this->belongsTo(Jalan::class, 'id_jalan', 'id');

}

我想在我的控制器中显示标题、created_at 和每个 id_jalan 中的第一张图像等数据,以显示这样的数据


路径控制器


// JalanController

public 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。


如何解决?谢谢


SMILET
浏览 154回答 2
2回答

肥皂起泡泡

您应该遵循 Laravel(尤其是 Eloquent)关于命名约定的建议和最佳实践。这意味着你的gallery_images表应该有gallery_id字段而不是你在那里的内容。信不信由你,那样你会跳过很多非受迫性错误和问题。我将让您回答我将如何代替您:// \App\Gallery::classclass Gallery extends Model{&nbsp; &nbsp; public function galleryImages()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->hasMany(GalleryImage::class);&nbsp; &nbsp; }&nbsp; &nbsp; public function firstGalleryImage()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->hasOne(GalleryImage::class);&nbsp; &nbsp; }}// \App\GalleryImage::classclass GalleryImage extends Model{&nbsp; &nbsp; public function gallery()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->belongsTo(Gallery::class);&nbsp; &nbsp; }}基本上,您可以根据需要在模型中设置返回特定关系的方法。在Gallery::class这里,您可以看到我已经设置了一个关系,它将只返回该画廊的第一张图片。在控制器中你会调用它public function someControllerMethod(){&nbsp; &nbsp; $gallery = Gallery::with(['firstGalleryImage'])->first();&nbsp; &nbsp; // or&nbsp; &nbsp; $galleries = Gallery::with(['firstGalleryImage'])->get();}现在返回的对象$gallery或集合$galleries将只携带第一张图像相关。在您的情况下(如果您不想更改字段名称),您需要遵循有关如何将另一个模型的键设置为方法参数的文档。

元芳怎么了

你可以使用 Laravel 的 Eloquent ORM(Eager Loading),这里是一个单一图像(图像)和多个图像(媒体)关系的例子。&nbsp; &nbsp; public function media()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->hasMany(Media::class, 'foreign_key', 'local_key');&nbsp; &nbsp; }&nbsp; &nbsp; public function defaultMedia()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->hasOne(Media::class, 'foreign_key', 'local_key');&nbsp; &nbsp; public function image()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return $this->defaultMedia();&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP