Laravel查询生成器即使绑定正确,也无法正确运行查询

Laravel查询生成器即使绑定正确,也无法正确运行查询,laravel,laravel-query-builder,Laravel,Laravel Query Builder,我对Laravel查询生成器有问题。当我尝试将包含某种sql代码的变量绑定到绑定参数中时,它不会返回任何结果。如果运行enableQueryLog(),我可以看到查询和绑定是正确的。因此,代码提供了一个非常好的查询,但它没有相应地执行 我已经试着打印出所有重要的变量。我启用了一个查询日志,以查看是否所有内容都设置正确。当我在whereRaw()中输入变量时,就像它没有绑定一样,它工作得很好。只是没有装订 这是我运行的代码: public function getCarbrands() {

我对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"
        }
    ]
}
$brands = DB::table('ni_carbrands')
                ->select('id','name')
                ->whereRaw($name)
                ->get();
但实际结果是:

{"info":1,"status":"Successfully found car brands","details":[]}
非常感谢您的帮助。

恶劣的原始条件:
whereRaw(':name',['name'=>$name])
就这样,

{
    "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"
        }
    ]
}
$brands = DB::table('ni_carbrands')
                ->select('id','name')
                ->whereRaw($name)
                ->get();

你也可以用这种

$brands = DB::table('ni_carbrands')
            ->select('id','name')
            ->where('name', '!=', 'Ford')
            ->get();
否则,您可以在动态字段中设置where条件 像


似乎无法绑定包含运算符的字符串。
看看这个 这个呢

这是一个等价的查询

select from ni_carbrands where 'name != Ford'
当然不行,因为你有很多

select from ni_carbrands where name != Ford

引号中的问题

您能给出响应代码吗??您在哪里将这些数据添加到详细信息?对不起,我现在提供了整个功能。响应代码是底部提供的信息。我知道它是这样工作的。我在问题中也提到了这一点。问题是,我不希望它像那样工作。更重要的是,我想知道为什么它不能像我那样工作。Bindings变量由
标记分隔<代码>':name'你从哪里得到的?变量替换如下
->whereRaw(“?”,['name'=>$name])
我从laravel docu和这里的一些帖子中得到了它。另外,我以前尝试过你的方法,但也不起作用。我使用的绑定方法也起作用,只是在这种情况下不起作用。如上所述,我知道这些版本可以工作,而且更容易。我想知道为什么我使用它的方式与whereRaw()不兼容。我之所以想知道这一点,是因为我需要它在其他函数中像那样工作。这只是为了测试目的,因为这个查询非常简单。你是什么意思?Laravel query builder,它将你的输入按原样放在SQL查询的where子句中。将其视为where()函数,其输入参数在插入查询之前不会被处理。WhereRaw:有时您可能需要在查询中使用一个原始表达式如果您访问illumb\Database\Query\Builder,您会发现这个方法可能会帮助您
公共函数WhereRaw($sql,array$bindings=[],$boolean='和'){$type='raw';$This->wheres[]=compact('type','sql','boolean'));$this->addBinding($bindings,'where');return$this;}
已经检查过,似乎无法发现问题。正如我所说,构造的查询是100%正确的,但由于某些原因,在幕后出现了一些错误。