2015-07-30 4 views
2

В моей комнате объект Я хочу получить изображение с наименьшим приоритетом. Так к моей модели номер я добавил:laravel 5 пользовательский метод в модели с запросом

public function picture(){ 
    Return Picture::where('room_id', $this->id)->orderBy('priority', 'asc')->first(); 
} 

В мой контроллер я называю этот метод, как:

public function($id){ 
    $room = Room::findOrFail($id); 
    $room->picture(); 
} 

Но когда я пытаюсь получить его на мой взгляд, как:

{{$room->picture}} 

Я получаю следующее сообщение об ошибке:

Способ связи должен возвращать объект типа Illuminate \ Database \ Eloquent \ Relations \ Relation

При использовании {{room room}} Я не вижу объект изображения в объекте комнаты, но приложение не сбой.

ответ

2

Если вы хотите, чтобы иметь возможность получить последнее изображение, подобное этому, вам нужно установить определение отношения в свой снимки() вместо того, чтобы извлекать объект. Таким образом, вы сможете использовать энергичную загрузку Eloquent; получение изображения с наименьшим (с точки зрения стоимости) приоритетом также будет очень простым.

Добавьте следующие строки в номер класса:

//relation definition - one to many 
public function pictures() { 
    return $this->hasMany(Picture::class); 
} 

//Eloquent getter 
public function getPictureAttribute() { 
    return $this->pictures()->orderBy('priority', 'asc')->first(); 
} 

Теперь вы можете легко получить доступ к наиболее важным изображение на $ номер объекта, выполнив:

$picture = $room->picture; 

Вы можете Узнайте больше о том, как настроить различные типы отношений в ваших моделях здесь: http://laravel.com/docs/5.1/eloquent-relationships

+0

Я думал, что было бы плохой практикой делать это так, потому что теперь вы выбираете все, а не фильтр, а не выбираете один или я ошибаюсь? –

+1

№ first() вызывается в построителе запросов, и он добавляет «ограничение 1» к запросу, поэтому из базы данных извлекается только один объект. –

+0

@ jedrzej.kuylo. Я получаю следующий метод erro: Relationship должен возвращать объект тип Illuminate \ Database \ Eloquent \ Relations \ Relation –