Laravel - 在where子句colmn上使用mysql函数

Vla*_*rov 0 php mysql encryption eloquent laravel-4

我有一个使用AES_ENCRYPT的加密字段数据库

数据是加密的,应该保持这种状态,因此无法更改加密的方法.

最近我开始与Laravel合作开展一个新项目.当我尝试使用AES加密的字段上的where子句进行更新时,我收到以下查询:

SELECT * FROM `users` WHERE `mail` = ? LIMIT 1
Run Code Online (Sandbox Code Playgroud)

以下绑定:

AES_ENCRYPT('email@email.com', 'somekey')
Run Code Online (Sandbox Code Playgroud)

对于以下代码:

$email = Input::get('email');
$user = User::where("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
Run Code Online (Sandbox Code Playgroud)

这基本上是合乎逻辑的 - 但是如何使用force它执行以下查询:

SELECT * FROM `users` WHERE `mail` = AES_ENCRYPT(?, 'someKey') limit 1
Run Code Online (Sandbox Code Playgroud)

有了这个绑定:

email@email.com
Run Code Online (Sandbox Code Playgroud)

希望有一种方法可以将函数传递给值的where子句

Dam*_*rsy 8

你可以试试whereRaw()

$user = User::whereRaw("mail", "AES_ENCRYPT('{$email}', '{$this->aesKey}')")->first();
Run Code Online (Sandbox Code Playgroud)

或者只是使用RAW表达式:

$user = User::where("mail", DB::raw("AES_ENCRYPT('{$email}', '{$this->aesKey}'))")->first();
Run Code Online (Sandbox Code Playgroud)