Шаблоны лезвия Larvel и часто встречающиеся модели - как получить первый элемент во многих отношениях - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующие красноречивые модели (удаленный код, чтобы облегчить эту проблему).Я пытаюсь получить первое изображение

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

Template (Работает нормально; я получаю имя для всехimages

@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 "," image ":" images / main_large.jpg "," design_id ": 1," creation_at ":" 2018-12-11 20: 10: 03 "," updated_at ":" 2018-12-11 20:10:03 "," delete_at ": null}

Как получить первое изображение в шаблоне блейда? Почему яполучить этот странный вывод?

1 Ответ

0 голосов
/ 18 декабря 2018

Ошибка возникает из-за того, что последний $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...