2015-09-20 3 views
1

Я пытаюсь использовать Eloquent, чтобы найти максимальное значение столбца в последней таблице из нескольких отношений has-many.Laravel 5.1 Красноречивый с() и max() с использованием нескольких отношений has-many

Учитывая следующую структуру таблицы.

Здание

+----+---------------+ 
| id | building_name | 
+----+---------------+ 
| 1 | Building 1 | 
| 2 | Building 2 | 
+----+---------------+ 

Номер

+----+-----------+-------------+ 
| id | room_name | building_id | 
+----+-----------+-------------+ 
| 1 | Room 1 |   1 | 
| 2 | Room 2 |   1 | 
| 3 | Room 3 |   2 | 
+----+-----------+-------------+ 

maintenancelog

+----+-------------------+---------+---------------------+ 
| id | maintenance_value | room_id |  timestamp  | 
+----+-------------------+---------+---------------------+ 
| 1 | Cleaned   |  1 | 2015-09-06 00:54:59 | 
| 2 | Cleaned   |  1 | 2015-09-06 01:55:59 | 
| 3 | Cleaned   |  2 | 2015-09-06 02:56:59 | 
| 4 | Cleaned   |  2 | 2015-09-06 03:57:59 | 
| 5 | Cleaned   |  3 | 2015-09-06 04:58:59 | 
| 6 | Cleaned   |  3 | 2015-09-06 05:59:59 | 
+----+-------------------+---------+---------------------+ 

Я хотел бы видеть, если это возможно, чтобы сформировать красноречивое заявление, что бы получить имя здания, помещение имя и ТОЛЬКО значение даты последнего журнала обслуживания.

Следующие работы, чтобы дать мне набор ВСЕХ значений.

$buildings = Building::with('rooms.maintenancelog')->get(); 

, но это ошибки вне, и это выглядит, как он пытается вызвать максимум (maintenancelog.timestamp) на столе зданий ..

$buildings = Building::with('rooms.maintenancelog')->max('maintenancelog.timestamp')->get(); 

Возвращена ошибка:

.....(SQL: select max(`maintenancelog`.`timestamp`) as aggregate from `buildings`) 

Am Я просто прошу слишком много от красноречивого, и должен ли я просто использовать базовый построитель запросов

ответ

1

Добавить следующие реляты onship модели комнат ...

public function latestMaintenance() 
{ 
    return $this->hasOne('App\Maintenancelog')->latest(); 
} 

и изменить Красноречивый заявление ..

$buildings = Building::with('rooms.latestMaintenance')->get(); 

ссылка Getting just the latest value on a joined table with Eloquent

Смежные вопросы