Oznámení
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:)