Eloquent在参数中的原始查询

11 浏览
0 Comments

Eloquent在参数中的原始查询

我有一个Laravel Eloquent的示例查询:

DB::select('SELECT * FROM users u WHERE u.id IN :param', ['param' => [1, 2, 3]]);

但它不起作用。

我该如何将这个数组参数绑定到查询中。

在Symfony中,我可以使用->setParameter('param', Connection::PARAM_INT_ARRAY)。

但是在Laravel中我没有看到相同的选项。

谢谢。

0
0 Comments

问题的出现原因:用户在使用Laravel框架的Eloquent ORM时,希望通过传入参数的方式执行原始查询语句,但是在示例中只给出了使用Eloquent模型的示例代码,没有给出使用原始查询的示例代码。

解决方法:用户可以使用Laravel的DB门面类来执行原始查询语句。示例中给出了使用DB门面类的示例代码,通过链式调用whereIn方法来传入参数执行查询。

以下是整理后的文章:

如果你正在使用Eloquent ORM,你可以这样做...

$id = [1,2,3];
$data = Model::find($id);

参考这里

如果你正在使用DB查询,你可以这样做...

$data = DB::table('users')
            ->whereIn('id', [1, 2, 3])
            ->get();

参考这里

希望对你有所帮助...

正如我所写的,这只是一个示例查询。我的真实查询要复杂得多,我无法使用与模型相关的任何内容。

0
0 Comments

问题出现的原因是在使用Eloquent的whereIn方法时,将参数数组作为参数传递给该方法。然而,在Eloquent中,参数数组被认为是要在查询中进行匹配的值,而不是要在查询中传递的参数。因此,当将参数数组传递给whereIn方法时,会出现错误。

解决方法是使用原始查询(raw query)来处理该问题。可以使用DB类的table方法来创建一个查询构造器对象,然后使用whereIn方法将参数数组作为参数传递给该方法。

具体的解决方法如下所示:

$params = [1, 2, 3];
$users = DB::table('users')->whereIn('id', $params)->get();

通过以上代码,可以使用原始查询来实现相同的查询功能,并正确地将参数数组传递给whereIn方法。这样,就能够得到符合条件的用户数据。

0
0 Comments

问题的出现原因:使用Eloquent的原始查询时,在参数中传递一个包含多个值的数组时,会出现错误。

解决方法:可以使用字符串和标记选择器代替参数来解决这个问题。

下面是解决方法的代码示例:

DB::select('SELECT * FROM users u WHERE u.id IN (?)', ['1, 2, 3']);

通过使用字符串和标记选择器,我们可以将包含多个值的数组转换为一个字符串并传递给查询语句。这样就可以避免在参数传递过程中出现错误。

0