有没有办法在 Eloquent 的同一个查询中使用相同的参数到多个位置?
Posted
技术标签:
【中文标题】有没有办法在 Eloquent 的同一个查询中使用相同的参数到多个位置?【英文标题】:Is there a way to use the same parameter into multiple place in the same query with Eloquent? 【发布时间】:2019-03-09 06:46:51 【问题描述】:我正在开发一个基于 Laravel 5.7 的项目,其中 Eloquent 被用作 ORM。
我需要在我的数据库上执行原始 SQL 语句。但是,我的查询在多个地方使用了相同的参数。
这是一个查询示例“这不是我真正的查询,它更多是为了解释问题。我的实际查询非常复杂,并且多次重复使用相同的参数”
SELECT * FROM table
WHERE a BETWEEN :from AND :to
AND c > :from
AND d < :to
我期待以下工作
$resorces = DB::select('SELECT * FROM table
WHERE a BETWEEN :from AND :to
AND c > :from
AND d < :to', ['from' => '2017-01-01 00:00:00', 'to' => '2018-10-01 00:00:00']);
但这给了我以下错误
SQLSTATE[HY093]: 参数号无效
如何使用 Eloquent 在同一个查询中的多个位置重复使用相同的参数?
【问题讨论】:
【参考方案1】:在您的模型中创建动态查询范围。
public function scopeQUERY ($query, $value1, $value2)
$query = DB::(YOUR QUERY);
return $query;
你的控制器
public function hello(Model name $Modelname)
$query = $Modelname->QUERY($value1, $value2);
文档https://laravel.com/docs/5.7/eloquent#query-scopes
【讨论】:
【参考方案2】:这个怎么样?
$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::table('table')
->whereRaw('a BETWEEN ? AND ?', [$from, $to])
->whereRaw('c > ?', [$from])
->whereRaw('d < ?', [$to])
->get();
【讨论】:
【参考方案3】:这可能会有所帮助:
https://***.com/a/35968797/10102373
这似乎是一个错误,这个答案提出了几个解决方法。
【讨论】:
【参考方案4】:这样的东西对你有用吗?
$from = '2017-01-01 00:00:00';
$to = '2018-10-01 00:00:00';
$resorces = DB::select('SELECT * FROM table
WHERE a BETWEEN ? AND ?
AND c > ?
AND d < ?', [$from, $to, $from, $to]);
【讨论】:
我试图避免这样做,因为我有更多的参数 发现这表明它不适用于重复的命名参数:***.com/questions/39257070/…以上是关于有没有办法在 Eloquent 的同一个查询中使用相同的参数到多个位置?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在 Laravel 5.8 中测试 Eloquent Observers?