Nig*_*ICU 8 php database laravel eloquent
我试图在Eloquent ORM中执行以下查询,似乎无法执行MySQL函数 -
$post = Post::where('slug', '=', $slug)->where('YEAR(created_at)', '=', $year)->first();
Run Code Online (Sandbox Code Playgroud)
我得到的例外情况如下 - 消息:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'YEAR(created_at)' in 'where clause'
SQL: SELECT * FROM `posts` WHERE `slug` = ? AND `YEAR(created_at)` = ? LIMIT 1
Bindings: array (
0 => 'placeholder',
1 => 2013,
)
Run Code Online (Sandbox Code Playgroud)
所以,基本上,它将YEAR()MySQL函数封装为一列.有没有办法在不使用原始查询的情况下执行此操作?
ULa*_*ins 25
为了防止Eloquent ORM用撇号包装第一个变量,你可以使用如下DB:raw函数:
$post = Post::where('slug', '=', $slug)
->where(DB::raw('YEAR(created_at)'), '=', $year)
->first();
Run Code Online (Sandbox Code Playgroud)
你会得到查询:
SELECT * FROM `posts` WHERE `slug` = ? AND YEAR(created_at) = ? LIMIT 1
Run Code Online (Sandbox Code Playgroud)
您可能不想YEAR()在WHERE子句中使用该函数.这会阻止您在created_at列上使用任何索引.我建议你LIKE改用:
$post = Post::where('slug', '=', $slug)->where('created_at', 'LIKE', $year . '%')->first();
Run Code Online (Sandbox Code Playgroud)
query()如果您需要在查询中使用不受支持的MySQL函数,也可以使用原始SQL查询(使用方法).
| 归档时间: |
|
| 查看次数: |
7283 次 |
| 最近记录: |