Есть ли способ использовать один и тот же параметр в нескольких местах в одном запросе с Eloquent? - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над проектом на основе Laravel 5.7, в котором Eloquent используется как ORM.

Мне нужно выполнить необработанный оператор SQL в моей базе данных.Тем не менее, мой запрос использует один и тот же параметр в нескольких местах.

Вот пример запроса "это не мой реальный запрос, он больше объясняет вопрос. Мой реальный запрос очень сложный и многократно использует одни и те же параметрыtimes "

SELECT * FROM table
WHERE a BETWEEN :from AND :to
AND c > :from
AND d < :to

Я ожидаю, что сработает следующее

$resorces = DB::select('SELECT * FROM table
    WHERE a BETWEEN :from AND :to
    AND c > :from
    AND d < :to', ['from' => '2017-01-01 00:00:00', 'to' => '2018-10-01 00:00:00']);

Но это приводит к следующей ошибке

SQLSTATE [HY093]: недействительнономер параметра

Как повторно использовать одни и те же параметры в нескольких местах одного и того же запроса с помощью Eloquent?

Ответы [ 4 ]

0 голосов
/ 04 октября 2018

Создание динамических областей запросов в вашей модели.

public function scopeQUERY ($query, $value1, $value2){

      $query = DB::(YOUR QUERY);

      return $query;
}

Ваш контроллер

public function hello(Model name $Modelname){

         $query = $Modelname->QUERY($value1, $value2);

}

Документация https://laravel.com/docs/5.7/eloquent#query-scopes

0 голосов
/ 04 октября 2018

Это может помочь:

https://stackoverflow.com/a/35968797/10102373

Возможно, это ошибка, и в этом ответе предлагается несколько вариантов обходных путей.

0 голосов
/ 04 октября 2018

Как насчет этого?

$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::table('table')
    ->whereRaw('a BETWEEN ? AND ?', [$from, $to])
    ->whereRaw('c > ?', [$from])
    ->whereRaw('d < ?', [$to])
    ->get();
0 голосов
/ 04 октября 2018

Хотелось бы что-нибудь подобное для вас?

$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::select('SELECT * FROM table
    WHERE a BETWEEN ? AND ?
    AND c > ?
    AND d < ?', [$from, $to, $from, $to]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...