larvel blade模板和elequent模型——如何获取多个关系中的第一个元素



我有以下有说服力的模型(删除代码以简化此问题(。我正在尝试获得第一个图像

class Design extends Model
{
use SoftDeletes;
protected $guarded = ['id','tags','keywords'];
public function images()
{
return $this->hasMany(DesignImage::class);
}
...
}
class DesignImage extends Model
{
use SoftDeletes;
public function design()
{
return $this->belongsTo(Design::class);
}
}

然后我有下面的代码,它被传递到刀片模板

$data['designs'] = Design::where('quantity','>',0)->get();
return view('mailings.form',$data);

模板(工作正常;我得到所有图像的名称

@foreach($design->images as $image)
{{ $image->name }}
@endforeach

但如果我尝试

{{ $design->images->first()->name }}

我得到正在尝试获取非对象`的属性'name'

如果我尝试

{{ $design->images[0]->name }}

我得到未定义的偏移:0

但是,如果我做

@json ($design->images->first())

我得到(有效(

{"id":1,"name":"Image 1 Design 1","thumb":"images/main_thumb.jpg">

如何获取刀片模板中的第一个图像?为什么我得到这种奇怪的输出?

由于最近的一个$design没有image,因此发生错误。试试这个代码

@foreach($designs as $design)
// your code
@php
$firstImage = $design->images()->first();
@endphp
{{ !empty($firstImage->name) ? $firstImage->name : ''}}
// other part ofcode
@endforeach

也可以使用控制器内优化此代码

$data['designs'] = Design::where('quantity','>',0)->with('images')->get();
return view('mailings.form',$data); 

可视

@foreach($designs as $design)
// your code
@php
$firstImage = $design->images->first();
@endphp
{{ !empty($firstImage->name) ? $firstImage->name : ''}}
// other part ofcode
@endforeach

最新更新