Oznámení
Primary key na viacerych stlpcoch a DibiFluent
před 9 lety
- westrem
- Člen | 398
Ahoj,
s dibi som uz celkom otukany, no dnes som bol postaveny (som sa sam postavil)
pred ukol, pri ktorom som sa s dibi sam zapotil.
Majme situaciu, ze v nasej tabulke je PRIMARY KEY
index na
2 stlpcoch a to id
a e_id
. Chceme pomocou DibiFluent
vykonat dotaz s klauzulou where
kde budeme referencovat takyto PK
pomocou operatoru IN
.
Otazka znie, ako to zapisat? Na 3× sa mi to podarilo, no vysledok nie je priamociary a dosiel som k nemu len vdaka tomu, ze miestami dost dobre poznam creva dibi:
dibi::select('*')
->from('[table]')
->where('(%n) IN %l',
array('id', 'e_id'),
array(
'1%l' => array(0,0),
'2%l' => array(1,3),
'3%l' => array(9,9),
)
);
a vysledok:
SELECT
*
FROM
`table`
WHERE
(`id`, `e_id`) IN ((0, 0), (1, 3), (9, 9))
Otazka znie, ide toto zapisat aj inak? (rozumej krajsie, intuitivnejsie).
Ak ano ako?
Ak nie, otazka na Davida, nebolo by vhodne popremyslat nad sposobom aby dibi
vedelo handlovat vnorene listy, tzn. ak mam operator %l
a posuniem
mu pole polí, aby vnutorne hodnoty tiez automaticky vyhodnocoval
s operatorom %l
? (Zavadza sa tym urcita magia a neviem ci by to
nevnieslo aj nejaku bezp. dieru, no podla mna by sa takato situacia mohla –
mala vyriesit).
před 9 lety
- Milo
- Nette Core | 1119
Já to řešil takhle a to je asi ještě horší.
$ids = array(
array( '%and', array( 'id%i' => 1, 'eid%i' => 1 )),
array( '%and', array( 'id%i' => 2, 'eid%i' => 2 )),
array( '%and', array( 'id%i' => 3, 'eid%i' => 3 )),
);
dibi::query( "SELECT * FROM [table] WHERE %or", $ids );