Laravel Query Builder即使认为绑定正确也无法正确运行查询

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

我在Laravel查询生成器中遇到问题。当我尝试将包含某种SQL代码的变量绑定到我的绑定参数中时,它不会返回任何结果。如果运行enableQueryLog(),则可以看到查询和绑定正确。因此,该代码提供了很好的查询,但并没有相应地执行。

我已经尝试打印出所有重要的变量。我启用了查询日志,以查看所有设置是否正确。当我将变量直接放入whereRaw()而不绑定时,它可以正常工作。只是没有绑定。

这是我运行的代码:

public function getCarbrands() {

        $name = 'name != Ford';
        try {
            $brands = DB::table('ni_carbrands')
                ->whereRaw(':name',['name'=>$name])
                ->select('id','name')
                ->get();
            echo json_encode( array('info' => 1 ,'status' => 'Successfully found car brands', 'details' => $brands));

        } catch(Exception $e){

            echo json_encode( array('info' => 0 ,'status' => 'Error finding car brands', 'e' => $e)); 

        }

    }

我知道绑定功能的这种使用是不必要的,它只是对我想构建的其他一些功能的测试。这是我的查询日志返回的内容:

array:1 [▼
  0 => array:3 [▼
    "query" => "select `id`, `name` from `ni_carbrands` where :name"
    "bindings" => array:1 [▼
      0 => "name != Ford"
    ]
    "time" => 190.25
  ]
]

查询的所有组件似乎都正确,但是似乎在生成它时遇到了一些麻烦。

预期结果将是这样:

{
    "info": 1,
    "status": "Successfully found car brands",
    "details": [
        {
            "id": 1,
            "name": "Toyota"
        },
        {
            "id": 2,
            "name": "Fiat"
        },
        {
            "id": 3,
            "name": "Iveco"
        },
        {
            "id": 4,
            "name": "Citroën"
        },
        {
            "id": 5,
            "name": "Opel"
        },
        {
            "id": 6,
            "name": "Mercedes"
        },
        {
            "id": 8,
            "name": "Volkswagen"
        },
        {
            "id": 9,
            "name": "Renault"
        },
        {
            "id": 10,
            "name": "MAN"
        },
        {
            "id": 11,
            "name": "Nissan"
        },
        {
            "id": 12,
            "name": "Hyundai"
        },
        {
            "id": 13,
            "name": "Peugeot"
        }
    ]
}

但是实际结果是:

{"info":1,"status":"Successfully found car brands","details":[]}

非常感谢您的帮助。

laravel laravel-query-builder
2个回答
0
投票

原始条件不良:whereRaw(':name',['name'=>$name])就像这样:

$brands = DB::table('ni_carbrands')
                ->select('id','name')
                ->whereRaw($name)
                ->get();

0
投票

您也可以使用这种类型

$brands = DB::table('ni_carbrands')
            ->select('id','name')
            ->where('name', '!=', 'Ford')
            ->get();

否则,您可以在动态字段中设置条件像

->where($name, '!=', 'Ford')
© www.soinside.com 2019 - 2024. All rights reserved.