laravel Конструктор запросов всегда возвращает? вместо значения переменной - PullRequest
0 голосов
/ 06 мая 2020

Я использую laravel 7.7.1, и в запросе я передаю переменную, открывающую документы следующим образом:

public function show($graad=3)
    {
        $sums=Sum::where(function ($query) use($graad) { 
            $query->where('graad',$graad);
            })->inRandomOrder()->limit(1)->toSql();

Результат всегда:

"select * from `sums` where (`graad` = ?) order by RAND() limit 1"   

Итак, переменная не передается правильным образом и преобразуется в "?".

Изменение значения $ graad = 'test' или $ graad = '3' или даже набор текста с помощью

 public function show(int $graad=3)

приводит к

 "select * from `sums` where (`graad` = ?) order by RAND() limit 1"

Градация столбца в таблице - это int (11). Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 06 мая 2020

Попробуйте следующее:

public function show($graad=3)
    {
        $sums=Sum::where(function ($query) use($graad) { 
            $query->where('graad',$graad);
            })->inRandomOrder()->limit(1);
        vsprintf(str_replace(['?'], ['\'%s\''], $sums->toSql()), $sums->getBindings());
0 голосов
/ 06 мая 2020

Laravel под капотом использует Подготовленные операторы. Это сделано для того, чтобы избежать инъекции SQL. ? - это заполнитель для данных, которые позже будут заменены привязками.

Вы можете использовать $query->getBindings(); для извлечения данных, которые будут привязаны в операторе SQL.

0 голосов
/ 06 мая 2020

Я думаю, вам не хватает get()

попробуйте:

$sums = Sum::where('graad', $graad)->inRandomOrder()->limit(1)->get();

или

$sums = JOBS::where(function($query) use ($graad){        
    $query->where('graad', $graad);
})->inRandomOrder()->limit(1)->get();
public function show($graad)
{
   // Rest of your code

И затем убедитесь, что ваш маршрут получает значение в URL-адресе и отправка (при условии, что вы вызываете метод именно так).

Route::get('your-route-name/{graad}', 'YourController@show');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...