Как можно поставить MYSQL предложение в laravel: - PullRequest
0 голосов
/ 17 марта 2020
SELECT Code_tank, temperature, salinity, PH, parameters.created_at as created_at FROM parameters WHERE id IN (SELECT MAX(id) FROM parameters group by code_Tank) ORDER BY code_tank ASC;

Я пытался поместить это SQL предложение в laravel, но не смог, это код, с которым я пытался:

$testMonitor= DB::table('parameters')
    ->select('code_Tank', 'salinity', 'PH', 'temperature', 
    DB::raw('parameters.created_at AS created_at'))
    ->whereIn('id', DB::raw('SELECT MAX(id) FROM parameters group by code_Tank'))
    ->orderby('code_Tank', 'asc')->get();

И это ошибка, Я предположил, что один из параметров в WHEREIN должен быть массивом, но я не могу придумать какой-либо другой способ размещения оператора SQL в laravel, пожалуйста, не могли бы вы помочь мне

TypeError: Argument 1 passed to Illuminate/Database/Query/Builder::cleanBindings() must be of the type array, object given, called in C:/laragon/www/SoftwareOzimandias/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php on line 907

1 Ответ

1 голос
/ 17 марта 2020

DB::Raw() вернет объект в качестве второго параметра для whereIn, но whereIn захочет принять параметр, являющийся массивом.

Вы можете использовать замыкание, проверьте ссылку where-оговорки :

DB::table('parameters')->whereIn('id', function($query){
    $query->select(DB::raw('MAX(id)'))
              ->from('parameters')
              ->groupBy('code_Tank');
})->orderby('code_Tank', 'asc')
->select('code_Tank', 'salinity', 'PH', 'temperature', 
    DB::raw('parameters.created_at AS created_at'))
->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...