thai

Statistika

Pridružen/a:
14 dec 2014, 00:05
Zadnjič aktiven:
Prispevki:
Teme:
16 | Vse teme
32
31
2

Podpis

*Uporabniku je bila prepovedana uporaba foruma zaradi večih uporabniških računov, ki so po [pravilih obnašanja](/pravila.html) prepovedani.*
#17

Sem uredil tako, če mogoče koga zanima.


$data = $request->except('avatar');
$data['avatar'] = $name;
Category::create($data);
všeč(0) ni všeč(0) spam(0)
#16

Oziroma bi lahko zapisal tudi Category::create([..., 'avatar' => $name]); ampak je to še vedno daljši zapis, ker moram zapisati vse vrednosti.


všeč(0) ni všeč(0) spam(0)
#15

Ima še eno bolj začetniško vprašanje.



Definiran imam custom request in me zanima, kako lahko spremenim posamezne vrednosti atributov oz. polja, ki ga dobim z $request->all()? Informativno me zanima za vse vrednosti, najbolj pa za "avatar", ki je "file" (vrne objekt).



dd($request->all())



Category::create($request->all()); mi v bazo pod vrednost "avatar" zapiše začasno pot do datoteke (?) želel pa bi, da se tu zapiše custom ime slike, ki sem ga generiral v spremenljivki $name.





Vse bi lahko zapisal kot


$category = new Category([
...
'avatar' => $name
]);

$category->save();

ampak mi je koda Category::create($request->all()); lepša in tudi krajša. Sem (optimistično) poskusil z $request->avatar = $name; pa ne deluje.


všeč(0) ni všeč(0) spam(0)
#20

Hvala vsem za predloge. Bom kar ostal pri recursive ;)


všeč(0) ni všeč(0) spam(0)
#17

carli:

Kako? Ne rabiš delat rekurzivnih klicev, za to da sortiraš!




Ne vem, če se midva razumeva. Lahko potem pokažeš, kako bi rešil spodnji primer brez uporabe recursive?



V bazi ima vsaka kategorija id ter parent_id, gnezdi se lahko, jasno, neomejeno globoko.




všeč(0) ni všeč(0) spam(0)
#15

bostjan:

poglej si še nested tree set (https://en.wikipedia.org/wiki/Nestedsetmodel), zna olajšat select querye




  • na faksu te naučijo, da se vsaka rekurzija da predelat v iteracijo (celo na izpitu imaš to :) )




Zanimivo.



carli: saj točno tako imam sedaj


všeč(0) ni všeč(0) spam(0)
#10

theuros:




thai:

Ni nujno, da ima nek meni 100 nivojev, vsaj pri moji skripti ne, če imaš 50 kategorij in ima vsak podkategorijo, se recursive kliče že 50x, ker mora za vsak podmeni pač kreirat nov meni. Sem pa omenil, da bodo rešitev uporabljali uporabniki in pri njih nikoli ne veš. Evo ti primer ene naključne strani... http://cult-trgovina.si/si/. Če imajo to rešeno z recursive, se ta kliče več kot 100x in php bi v tem primeru izpisal error (če bi ostala "default Maximum function nesting level of 100"). Tko da tale "halo?" lahko postane realnost :P




Očitno ti gradiš nek menu iz kategorij ki jih imaš .. ko se kreira prvi nivo greš za vsako kategorijo pogledat če ima podkategorijo in prikažeš še te .. in tako v nedogled v globino kolikor jih obstaja.



Kategorij ne sme biti toliko da bi se ti funkcija obesla .... pa če tudi .. še vedno lahko postopoma zlagaš meni in ne vsega naenkrat, ... pa tudi vse skupaj vržeš v cache tako da se ne izvede ob vsakem requestu ..



Vseh kategorij nima smisla imet na enkrat odprtih, tako da prikažeš samo aktivne in na klik izdeveš kak ajax da ti pokaže še podkategorije.




Si si pogleda meni na tej strani ? http://cult-trgovina.si/si/ Ne pride tu v poštev ajax, keširanje pa lahko uredim šele potem, ko je meni že zgeneriran.


všeč(0) ni všeč(0) spam(0)
#9

theuros:




thai:

Če so samo kategorije, potem se jasno Recursive funkcija ne kliče



thai:

če pa imam na primer 50 kategorij, vsaka ima še svojo podkategorijo in ta še eno podkategorijo, se pa Recursive kliče 100x




Če so samo kategorije se recursive ne kliče, če pa so podkategorije pa se ?? .. kaj podkategorija ni kategorija ?



Prosim napiši praktičen primer kaj dejansko delaš, saj iz te razlage ni nič jasno. Kaj mogoče vsaka kategorija vsebuje X število člankov ali kakšnih izdelkov in zdaj tebe skrbi, da če bi hotel izpisati vse članke ali izdelke iz večjega števila gnezdenih kategorij, da bi se ti ta funkcija obesla oz. šla v timeout ?



Pa glede "default nesting level" ... to mi še vedno ni jasno kaj je ???? funkcija lahko gre v timeout če deluje preveč časa neglede in v tem času se lahko izvede 10x, 100x ali 1000x ..




Poženi tole kodo pa boš videl, o kakšni napaki govorim (Fatal error: Maximum function nesting level of '100' reached, aborting!)....


function count100($n) {
static $n = 1;
if ($n <= 100) {
echo $n . '<br />';
$n++;
count100($n);
}
}

count100(1);

V php.ini bi bilo potrebno povečati vrednost za xdebug.maxnestinglevel, če se ne motim.



Drugače pa moja koda generira na primer spodnje gnezdenje.





(podatki so iz večdimenzijskega polja, ki je generiran tako, da ima posamezna kategorija zapis $kategorija[$parent_id][$id] - na podlagi tega polja se potem z recursive ustvari seznam na zgornji sliki)


všeč(0) ni všeč(0) spam(0)
#6

Ni nujno, da ima nek meni 100 nivojev, vsaj pri moji skripti ne, če imaš 50 kategorij in ima vsak podkategorijo, se recursive kliče že 50x, ker mora za vsak podmeni pač kreirat nov meni. Sem pa omenil, da bodo rešitev uporabljali uporabniki in pri njih nikoli ne veš. Evo ti primer ene naključne strani... http://cult-trgovina.si/si/. Če imajo to rešeno z recursive, se ta kliče več kot 100x in php bi v tem primeru izpisal error (če bi ostala "default Maximum function nesting level of 100"). Tko da tale "halo?" lahko postane realnost :P


všeč(0) ni všeč(0) spam(0)
#4

theuros:

hm.. nevem kako si ti to zložil skupaj in kdo ali kaj ti določi "nesting level" ??



Glede na to da imaš neke kategorije, sklepam da uporabljaš neko bazo za te kategorije Se pravi če ima vsaka kategorija nek svoj ID in da ima poleg še parent ID ... potem ne igra nobene vloge koliko kategorij obstaja, koliko jih je pod določeno in koliko globoko gredo ? Rekurzivna funkcija ti v takem primeru služi samo za iskanje parenta X nivojev navzgor ... v globino več kot par nivojev pa ni smiselno it oz. če moraš pomeni da si slabo zastavil logiko. Verjetno ne razumem najbolje kaj sploh počneš in kje oz. kaj je ta nesting level :)




Približno tako imam, ja. Kategorija ma svoj id in parent_id. Če so samo kategorije, potem se jasno Recursive funkcija ne kliče vendar, če pa imam na primer 50 kategorij, vsaka ima še svojo podkategorijo in ta še eno podkategorijo, se pa Recursive kliče 100x in smo že pri default omejitvi in se izpiše napaka. Saj teoretično je to kar težko doseči ampak glede na to, da planiram, da bodo zadevo izpolnjevali uporabniki, nikoli ne veš, kdaj se bo našel kdo, ki bo malo "pretiraval" zato sprašujem, če obstaja kak elegantnejši način, kako nalogo rešiti, da bi se lahko izognil tej default nesting level omejitvi.


všeč(0) ni všeč(0) spam(0)