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

Php 在laravel中显示数据库中的一幅图像,php,laravel,image,Php,Laravel,Image,我在拉维尔有两张桌子 jalans jalan_图像 在一个id_jalan中可以有许多图像,我的关系就是这样 日兰车型 // Model Jalan public function jalanImage() { // return $this->hasMany('App\JalanImage', 'id_jalan'); return $this->hasMany(JalanImage::class, 'id_jalan'); } public functio

我在拉维尔有两张桌子

  • jalans
  • jalan_图像
在一个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');
}
我想在我的控制器中显示诸如title、created_at和每个id_jalan中的第一个图像之类的数据,以显示如下数据

JalanController

// 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
@foreach($jalan作为$row)
{{date('dfy',strottime($row->created_at))}

{{{$row->category}

@endforeach
当我用dd($jalan->toArray())显示它时在我的控制器中,显示第一个_图像

如何修复它?
谢谢你

你应该遵循拉威尔(特别是雄辩家)的建议和命名惯例。这意味着您的
gallery\u图像
表应该有
gallery\u 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
$gallers
的集合将只携带第一个相关图像。在您的情况下(如果您不想更改字段的名称),您需要了解如何将另一个模型的键设置为方法的参数。

您应该遵循Laravel(特别是Eloquent)的建议以及关于命名约定的建议。这意味着您的
gallery\u图像
表应该有
gallery\u 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
$gallers
的集合将只携带第一个相关图像。在您的情况下(如果您不想更改字段名称),您需要了解如何将另一个模型的键设置为方法的参数。

您可以使用Laravel的雄辩ORM(急切加载), 以下是单个图像(图像)和多个图像(媒体)关系的示例

    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();
    }

您可以使用Laravel的雄辩ORM(渴望加载), 以下是单个图像(图像)和多个图像(媒体)关系的示例

    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();
    }

请提供有关如何设置id\u galeri的示例数据。希望不是CSV。请提供如何设置
id\u galeri
的示例数据。希望不是CSV。我一直在关注您的答案,但在我看来,blade无法显示第一张图像。如何在查看刀片中显示firstimage?它是否与“image)}}相同?@Arief来自
$gallery->filename的响应是什么?
显示所有数据,只有firstimage不显示。当我显示到dd($galeri->toArray())时,显示的第一个图像中的名称,但我对在blade中显示感到困惑view@Arief
$gallery->filename
必须从数据库中获取什么?我将显示标题、创建位置以及连接表galeris和galeri图像中的第一个图像我已经了解了您的答案,但在我看来,blade无法显示第一个图像。如何在查看刀片中显示firstimage?它是否与“image)}}相同?@Arief来自
$gallery->filename的响应是什么?
显示所有数据,只有firstimage不显示。当我显示到dd($galeri->toArray())时,显示的第一个图像中的名称,但我对在blade中显示感到困惑view@Arief
$gallery->filename
必须从数据库中获取什么?我将显示标题、创建的位置以及联接表galeris和galeri图像中的第一个图像