tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

fluent interface a like

před 10 lety

BigCharlie
Člen | 267

Ahoj,
tenhle kód:

dibi::select('*')
    ->from('mytable')
    ->where('mycol')
    ->like('a')
    ->test();

produkuje výsledek

SELECT *
FROM `mytable`
WHERE `mycol` LIKE `a`

Jak získat výsledek

SELECT *
FROM `mytable`
WHERE `mycol` LIKE '%a%'

před 10 lety

vlki
Člen | 218
<?php

dibi::select('*')
    ->from('mytable')
    ->where(array('mycol%ex' => array('LIKE %s', '%a%')))
    ->test();

?>

před 10 lety

BigCharlie
Člen | 267

Díky, to je ono. Myslel jsem si, že to půjde přes fluent pomocí like, ale vždy mi to obalilo hledaný výraz do zpětných uvozovek (jako název sloupce).

Existuje i možnost, jak where předhodit pole tak, aby se jednotlivé výrazy pospojovaly třeba pomocí OR? Tedy něco jako:

where(array(
    'mycol%ex%or' => array(
        array('LIKE %s', '%a%'),
        array('LIKE %s', '%b%'),
    ),
))

, tj. kombinace expanze a OR.

Editoval BigCharlie (23. 10. 2009 10:40)

před 10 lety

vlki
Člen | 218

No, pokud se nemýlím, tak by mohlo jít takhle… Název sloupce tam nejde dát do klíče toho asociativního pole, protože by byly stejné a to v poli nejde.

<?php
    ...
    ->where(array('%or' => array(
        array('%n', 'mycol', 'LIKE %s', '%a%'),
        array('%n', 'mycol', 'LIKE %s', '%b%'),
    )))
    ...
?>

před 10 lety

kravčo
Člen | 723

LIKE ide aj jednoduchšie:

dibi::select('*')
    ->from('mytable')
    ->where('mycol')
    ->like('%s', '%a%')
    ->test();

před 10 lety

vlki
Člen | 218

Wow, nevěděl jsem. Díky kravčo.

Takže by mohlo jít i následující?

<?php
dibi::select('*')
    ->from('mytable')
    ->where('mycol')
    ->like('%s', '%a%')
    ->or()
    ->where('mycol')
    ->like('%s', '%b%')
    ->test();
?>

před 10 lety

kravčo
Člen | 723

Toto nie… Však si to skús spustiť…

před 10 lety

BigCharlie
Člen | 267

Díky za popostrčení, už se lehce začínám orientovat. Vlki, ten tvůj dotaz jde přepsat takhle:

<?php
dibi::select('*')
    ->from('mytable')
    ->where('mycol')
    ->like('%s', '%a%')
    ->or('mycol')
    ->like('%s', '%b%')
    ->test();
?>

Editoval BigCharlie (23. 10. 2009 13:20)

před 10 lety

vlki
Člen | 218

Taky díky za osvětu. Práci s modifikátory a fluent interface se člověk učí pořád:)