【问题标题】:Trying to get property of non-object for images试图获取图像的非对象属性
【发布时间】:2019-09-07 06:26:26
【问题描述】:

在我的“显示”页面之一,即我的 /anime/1 路线中,图像显示正常。但是 /anime/2 到 156,我得到一个“试图获取非对象的属性 'src'”。

我想知道为什么它可以在一个页面上正常工作,而在其他页面上却不行?

控制器:

public function show(Anime $anime)
{
    return view('show', compact('anime'));
}

型号:

应用\动漫

public function episodes()
{
    return $this->hasMany(Episode::class);
}

应用\剧集

public function images()
{
    return $this->hasOne(EpisodeImages::class);
}

查看:

@foreach ($anime->episodes as $episode)
    <div>{{$episode->id}}</div>
    <div>{{$episode->name}}</div>
    <div>{{$episode->sypnosis}}</div>

    <div><img src="{{$episode->images->src}}"></div>

    <b>{{round($episode->rating())}}</b>
    <br /><br />
@endforeach

【问题讨论】:

  • 只是因为那个动画(id为2)没有图片。

标签: laravel


【解决方案1】:

您可以检查信息是否存在并且是否正确。您可以使用:

{{dd($episode->images->src)}}

可能某些情况下的信息为空或为空。在这种情况下,对象不存在所以没有对象......

也许将模型固定为始终发送信息很方便,即使它为空。

也许你可以试试:

@if(isset($episode->image->src) && $episode->image->src!="")
<div><img src="{{$episode->images->src}}"></div>
@endif

但是我强烈建议它使用存储来检查文件是否存在:

@if(isset($episode->image->src) && Storage->disk('yourdiskname')->exists($episode->image->src))
<div><img src="{{Storage->disk('yourdiskname')->url($episode->images->src)}}"></div>
@endif
// maybe else and show default img. 

【讨论】:

  • 感谢您的帮助,但您认为您能解释一下我可以通过以下方式检索图像的方法吗:一部动漫每部有 12 集,在我显示这些集的页面上:动漫/{id},我希望每个单独的图像都有它的图片。日本动漫 / 1 作品,但我也希望动漫 / 2 也能正常工作。我正在努力的是 Eloquent,我与 Episode.php 的关系是 public function images() { return $this->hasOne(EpisodeImages::class,); }
  • 检查您是否拥有正确的信息模型很重要。如果 eloquent 没有找到元素,则返回 null。如果你没有这个元素,很可能你会出错。显然是因为,该元素不存在。解决方案可能是修复模型。如果您有一个情节,并且您和图像需要在两者之间建立关系。
  • 在图像表中,您需要一个字段 episode_id 一个一对多的关系 o 如果这是一对一,则为一对一。在控制器之后:您将加载此关系: $data['episodes']=App\Episode::all->with('images'); ->with('image') // 加载图像并与每个相关项目一起放置 :) 也许你可以检查这个项目是否存在。如果不存在,则创建一个空对象或加载一个默认对象以避免错误。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多