Простой способ, без join
, с использованием max
:
$query = DB::table('equip')
->select(DB::raw('*, max(id) as id'))
->groupBy('id_equip')
->orderBy('id', 'asc')
->get();
(Предполагая, конечно, что вы можете рассчитывать на то, что ваши id
будут в порядке дат.)
Вы также можете сделать это с помощью Eloquent, используя отношение "один к одному" со ссылками на самих себя. Запрос занимает больше времени, но он больше похож на Laravel:
Определите отношение в вашей модели:
class myModel extends Eloquent {
public function latestEquipment()
{
return $this->hasOne('myModel', 'id_equip', 'id_equip')->latest();
}
}
(Обратите внимание, что в этом случае мы используем latest()
, чтобы не полагаться на порядок id
для определения самой последней записи, а скорее на created_at
дату каждой записи. Это более точно.)
Чтобы получить все записи с их последней записью об оборудовании:
$latest = myModel::with('latestEquipment')->groupBy('id_equip')->get();
// loop over the results
foreach ($latest as $l) {
if ($l->equipment) {
echo('ID: ' . $l->id . 'ID_EQUIP: ' . $l->id->id_equip . '<br>');
}
}
person
damiani
schedule
24.10.2014