A model-ből nyert adatok kezelése egyszerűbben, néhány szó a NeatArray és Set objektumokról

Munkái(m|nk) során sokszor kérdezünk le adatot a model find() és findAll() metódusaival (vagy valami mással). Ezeket az eredménytömböket hí­vja a cake NeatArray-nek. Hogy miért fontos ez? Mindjárt kiderül.

Update (2007. 05. 09): most találtam egy linket, amely szerint kb 1 hete a legfrissebb verzióból (cake 1.2 svn) kikerült a NeatArray, a továbbiakban a Set használata javallott helyette.

Ami fontossá teszi, hogy az adatbázisból kikerült adatok kezelése szinte minden esetben ebben a formában zajlik. Azért mondom, hogy szinte, mert néha előfordul, hogy egy-egy select előállí­tásához használjuk a generateList()-et (erre még visszatérünk).
Amit a cucc tud, az gyakorlatilag le van í­rva az API dokumentációban. Lehet benne/vele egyszerűen:

  • szűrni, keresni / findIn(), filter(), multi_search()
  • törölni, hozzáadni, egyesí­teni / cleanup(), add(), plus()
  • feltétel szerint adatsorhoz további adatokat hozzáfűzni !!! / joinWith()

Amiről valójában í­rni akarok, az egy rövidke kód, amely a fent emlí­tett generateList() model-metódust kí­vánja kiváltani és megteremti a lehetőséget a kibőví­tésére. Tapasztalatom szerint ugyanis sokszor szükség lehet a lekérdezett adatok bőví­tésére, olyan dolgokkal, amelyek nem találhatók meg a táblákban: gondoljuk el, hogy egy select-ben szeretnénk megjelení­teni a városok listáját (mondjuk keresés során), viszont nem kell feltétlenül várost megadni, tehát van egy mindegy opció is.

Tehát jó lenne használni az alábbihoz hasonló kódot (egyelőre legalábbis):

$cities = $this->City->findAll();
array_unshift($cities, array(
  'City' => array(
    'id' => 0, 'name' => 'not important'
  )
));
$cityList = neatToList($cities, "{n}.City.id", "{n}.City.name");

Jó hí­r, hogy a kód meglehetősen rövid:

function neatToList($array, $key, $value) {
  return array_combine(Set::extract($array, $key), Set::extract($array, $value));
}

A kód egyszerűsége leginkább a cake core team és Felix Geisendörfer munkáját dicséri. Azt észre kell venni, hogy a kód nem a NeatArray-t használja, hanem a cake beépí­tett Set objektumát, amely csodákra képes, ha tömbökről van szó.

Ez által hasznosabb páros jön létre, mint a model generateList().

Kategória: cakephp
Címke: ,
Közvetlen link a könyvjelzőhöz.

Egy hozzászólás a(z) 0ejegyzéshez

  1. teleszpemmelik a blogodat :) szerint:

    teleszpemmelik a blogodat öregem🙂

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s