laravel查询生成器总是返回变量的值的?

问题描述 投票:0回答:1

我使用的是laravel 7.7.1,在一个查询中,我传递了一个变量iaw的docs,像这样。

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"

表中的列graad是int(11).我做错了什么?

laravel eloquent
1个回答
0
投票

我认为你缺少了 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');

0
投票

Laravel在引擎盖下使用了预备语句. 这是为了避免SQL注入. 语句中的 ? 是数据的占位符,这些数据将在稍后被绑定所替代。

您可以使用 $query->getBindings();来获取将在SQL语句中绑定的数据。


-1
投票

请尝试以下方法。

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());
© www.soinside.com 2019 - 2024. All rights reserved.