Frage

Ich bin mit Postgres mit Kohana 3 ORM-Modul und möchte eine SELECT unter Verwendung eines Postgres ausgeführt Funktionswerte konvertieren bereits in der Datenbank Fall zu senken, bevor der Vergleich zu tun.

In SQL würde ich schreiben:

select * from accounts where lower(email) = 'alice@spam.com';

In Kohana ich etwas schreiben wie diese möchte:

$user = ORM::factory('user')
    ->where('lower(email)', '=', strtolower('alice@spam.com'))
    ->find();

Aber das gibt einen Fehler, da ORM versucht, den Spaltennamen als abzuleiten ‚untere (E-Mail)‘ und nicht nur ‚E-Mail‘.

Ich bin neu in Kohana und ORM so Alternativen, die mir das gleiche Ergebnis würde auch nützlich wäre.

War es hilfreich?

Lösung

oder IMHO sogar beter, versuchen Sie dies:

$user = ORM::factory('user')
    ->where('LOWER("email")', '=', DB::expr("LOWER('alice@spam.com')"))
    ->find();

PS. Ich sehe keine Notwendigkeit, eine DB :: niedriger () Helfer zu schaffen, aber das könnte nur ich ...

EDIT:

$value = 'alice@spam.com';

$user = ORM::factory('user')
    ->where('LOWER("email")', '= LOWER', (array) $value)
    ->find();

Die Abfrage so etwas wie (havent gebrauchter ORM in einer Zeit lang) werden wird "SELECT users.id, users.email FROM users WHERE LOWER (" E-Mail ") = LOWER ( 'alice@spam.com') LIMIT 1". Beachten Sie den Raum, ich aktualisiere nur einige meinen Code, um dies zu verwenden, da ich gerade aus dieser posibility dacht.

Ich hoffe, dass Sie mit ihm so glücklich sein, wie ich bin.

Andere Tipps

versuchen, diese:

$user = ORM::factory('user')
    ->where(DB::expr('lower(email)'), '=', strtolower('alice@spam.com'))
    ->find();

Ich bin nicht ganz zufrieden mit der Verwendung eines Helfer aber ich benutze es ein paar andere Klassen so ist es schön, die Logik in einer Position zu halten. Hier ist, was ich zur Zeit verwendet wird.

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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top