Laravel + Mongo DB последние уникальные записи из базы данных - PullRequest
1 голос
/ 05 июня 2019

Я работаю над проектом БД Laravel + Mongo, в котором мы храним данные следующим образом:

_id                      | machinename | SoftwareKey  | created_at
-----------------------------------------
5cf6c4a7fdce2778e833dd88 | VM007       | TestSoftware | 2017-01-30 13:22:39
-----------------------------------------
5cf6c4a7fdce2778e833324  | VM008       | TestSoftware | 2017-01-30 13:23:42
-----------------------------------------
5cf6c4a7fdce27783244355  | VM009       | TestSoftware | 2017-01-30 13:25:54
-----------------------------------------
5cf6c4a7fdce27723424345  | VM007       | TestSoftware | 2017-01-30 13:25:
-----------------------------------------
5cf6c4a7fdce23432432745  | VM008       | TestSoftware | 2017-01-30 13:25:54
-----------------------------------------
5cf6c4a7fdce27732467876  | VM009       | TestSoftware | 2017-01-30 13:25:33

Мне нужно адаптировать метод, который возвращает все записи из этой таблицы, чтобы возвращать только самую последнюю запись дляимя машины, в основном, чтобы вернуть эту часть:

_id                      | machinename | SoftwareKey  | created_at
-----------------------------------------
5cf6c4a7fdce2778e833dd88 | VM007       | TestSoftware | 2017-01-30 13:22:39
-----------------------------------------
5cf6c4a7fdce2778e833324  | VM008       | TestSoftware | 2017-01-30 13:23:42
-----------------------------------------
5cf6c4a7fdce2778324      | VM009       | TestSoftware | 2017-01-30 13:25:54

Метод индекса:

public function index() {
    $hills = Hill::all();

    return fractal()
        ->collection($hills)
        ->transformWith(new HillTransformer)
        ->toArray();
    }

Я нашел этот вопрос, и я попытался адаптировать свой метод:

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Hill;
use App\Transformers\HillTransformer;
use DB;

class HillController extends Controller
{
    public function index() {
       $hills = DB::select("SELECT *
       FROM hills
       JOIN (SELECT machinename, MAX(created_at) created_at
               FROM hills
           GROUP BY machinename) machinenames
         ON machinename = machinenames.machinename
        AND created_at = machinenames.created_at");

        return fractal()
            ->collection($hills)
            ->transformWith(new HillTransformer)
            ->toArray();
    }
}

Но я получаю это исключение:

"message": "Вызов функции-члена prepare () при нулевом значении", "исключение": "Symfony \ Component \"Debug \ Exception \ FatalThrowableError "," file ":" /home/vagrant/code/hilltracking/vendor/laravel/framework/src/Illuminate/Database/Connection.php "," line ": 326,

Есть ли другой способ сделать это?Спасибо!

Кстати.Я использую laravel-mongodb и фрактальные библиотеки.

...