» »

PHP OOP vprašanje

PHP OOP vprašanje

rookieee ::

Rad bi naredil class s katerim bi lahko do metod dostopal na takšen način...

1. $object->where($p1,$p1); // vrne več zadetkov iz mysql baze

ter

2. $object->where($p1,$p2)->first(); // vrne le 1 zadetek

Enako kot ima narejen Laravel FW (mi je všeč zato želim ponavljati). Vsako posebej znam narediti, nekako mi pa ne uspe združiti obeh načinov hkrati.

Recimo sedaj imam narejeno tako, da metoda where() returna $this (predhodno jasno rezultat mysql query-ja shranim kot lastnost), potem pa to lastnost (ki je shranjena kot [0 => object]) v metodi first() vržem iz polja ven, ker imam pač samo en objekt. Jasno tako želim, ko ima query en zadetek, če jih ima več, mora biti pač polje objektov. Torej, kako narediti, da mi bo..

$object->where($p1,$p1)...

vrnil polje objektov

in HKRATI, da mi bo klic...

$object->where($p1,$p1)->first()

vrnil le objekt (ker je le 1, ni potrebe, da ga hranim v polju).

Jasno lahko pustim le rešitev $object->where($p1,$p1); ampak mi je potem tečno klicati lastnosti z $nekaj[0]->lastnost, če pa vem, da je le en zadetek in bi mi bilo lepše klicati z le $nekaj->lastnost. Ker uporabljam Twig template engine imam potem še packarijo pri dostopu do teh spremenljivk.

Upam, da sem jasno napisal kaj želim doseči, če kaj ni razumljivo, lahko dodatno pojasnim. Prosim za pomoč.
  • spremenilo: rookieee ()

rookieee ::

Če ne bo šlo drugače, bom pač ustvaril še eno metodo whereFirst() ampak to je res amatersko :P tko da bi res prosil kakšnega php stručkota za pomoč.

Zgodovina sprememb…

  • spremenilo: rookieee ()

ales85 ::

V metodi first() vrneš samo prvi element. Če pa skozi te metode sestavljaš query in ga nato izvršiš preko get() (kot v Laravelu), pa v metodi first() dodaš v query "LIMIT 1".

rookieee ::

Najlepša hvala! Sem čisto pozabil na get() in mislil, da bo nekako (čudežno) šlo kar brez :). Z metodami sestavljam query, z get() ga izvršim. Dobra ideja! Sem že uredil in deluje odlično. :)

ales85 ::

Lahko pa dodaš tudi implementacijo LIMIT in OFFSET preko take() in skip().

Mimogrede, zakaj pa delaš svoj ORM? Če za učenje potem super, če pa za praktično okolje, bi morda bilo boljše, da uporabiš nekaj preverjenega.

Zgodovina sprememb…

  • spremenil: ales85 ()

rookieee ::

Delam eno večjo zadevščino (multitenancy, poddomene, več baz, tem, modulov...) in se mi zdi, da če bom vse skupaj sam napisal, da bo delovalo hitreje, ker bo res maksimalno poenostavljeno. Z opensource rešitvami nimam najboljših izkušenj. Vse je narejeno tako univerzalno, kar je sicer dobro, če ne bi imelo toliko vpliva na hitrost. Tako da sem nekako obupal nad Laravelom, za ORM si pa tudi ne upam vzeti kakšne opensource rešitve zaradi prej omenjenega. Zaenkrat je edini kompromis Twig, ker ga enostavno nujno potrebujem pa kar bom še navlekel preko composerja za kakšne enostavnejše zadeve ostalo bom pa nekako poskušal "spacati" sam :D.

Zgodovina sprememb…

  • spremenilo: rookieee ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python in postgresql (strani: 1 2 )

Oddelek: Programiranje
777092 (5993) ZaphodBB
»

Potrebujem MySQL ukaz

Oddelek: Programiranje
122595 (2203) zvmk
»

Ne-relacijska baza

Oddelek: Programiranje
193859 (2482) mitjaR
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8511277 (9744) kivi113
»

Kaj je narobe tu...(php)

Oddelek: Programiranje
51127 (1025) teac

Več podobnih tem