如何在kohana 3 orm中使用数据库函数选择查询
-
02-10-2019 - |
题
我正在使用Kohana 3的ORM模块使用Postgres,并希望在进行比较之前使用Postgres函数运行Select将数据库中的值转换为较低的情况。
在SQL中,我会写:
select * from accounts where lower(email) = 'alice@spam.com';
在Kohana,我想写这样的东西:
$user = ORM::factory('user')
->where('lower(email)', '=', strtolower('alice@spam.com'))
->find();
但这给出了一个错误,因为ORM试图将列名推断为“较低(电子邮件)”,而不仅仅是“电子邮件”。
我是Kohana和Orm的新手,因此可以给我同样结果的替代方案也将很有用。
解决方案
或恕我直言,甚至贝特(Beter),请尝试以下操作:
$user = ORM::factory('user')
->where('LOWER("email")', '=', DB::expr("LOWER('alice@spam.com')"))
->find();
PS。我认为不需要创建DB :: lower()助手,但这可能只是我...
编辑:
$value = 'alice@spam.com';
$user = ORM::factory('user')
->where('LOWER("email")', '= LOWER', (array) $value)
->find();
查询将变成类似(一段时间以来使用ORM)“选择用户。注意空间,我刚刚更新了一些代码以使用此功能,因为我只是弄清楚了这种能力。
希望您能像我一样对此感到满意。
其他提示
试试这个:
$user = ORM::factory('user')
->where(DB::expr('lower(email)'), '=', strtolower('alice@spam.com'))
->find();
我对使用助手的使用并不完全满意,但是我使用了其他几个课程,因此将逻辑保留在一个位置很不错。这是我目前正在使用的。
class DB extends Kohana_DB
{
public static function lower($value)
{
return DB::expr('lower('.Database::instance()->quote($value).')');
}
}
class Model_User extends Model_Base
{
public static function find_by_email($email)
{
$user = ORM::factory('user')
->where(DB::expr('lower(email)'), '=', DB::lower($email))
->find();
return $user;
}
不隶属于 StackOverflow