Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zdjęcie

praktyka deweloperska


  • Zaloguj się, aby dodać odpowiedź
1 odpowiedź w tym temacie

#1
gutenbergus

gutenbergus

    Znawca

  • Zarejestrowani
  • PipPipPipPip
  • 189 postów
Mam do was pytanie ogólne.

Jest oto taki problem: mamy w bazie danych dwa pola, które trzeba pomnożyć i pokazać wynik na stronie. I teraz jak to zrobić, bo sposoby są co najmniej 3.
Można obliczać po stronie bazy danych

select pole1 * pole2 as wynik from tabela;

i wynik zapytania przekazać do tablicy w metodzie compile() naszej klasy

możliwość druga

to przekazujemy wartości pół z zapytania do funkcji compile() i dokonujemy operacji w tej klasie, w wyniku tego otrzymujemy tablicę z dodatkowym polem myArray['wynik']. i tu przy okazji pytanie jak to robić, bo zapis taki:

while ($objDane->next())
 
{
$arDane[] = array
(
'id' => $objDane->id,
'pole' => $objDane->width * $objDane->height
);
}

nie zadziała. Ja robię to tak, że tworzę dodatkową metodę:
private function calculate($o) {
 
return $o->width * $o->height
}

i zamiast
'pole' => $objDane->width * $objDane->height
piszę
'pole' => $this->calculate($objDane)

ale nie wiem, czy to jest słuszne postępowanie, bo trzeba przy większej ilości operacji nagenerować tych metod trochę....

no i wreszcie trzeci sposób:
select pól z bazy ---> przekazanie tablicy do metody compile() ---> przekazanie tablicy z wartością pól do templejtu i teraz dopiero mając w templejcie te pola zabieram się za ich mnożenie i ewentualne formatowanie.

<?php echo $this->pole1 * $this->pole2; ?>

No i teraz która metoda jest "najpoprawniejsza", a która "najwydajniejsza".

Podzielcie się proszę własnymi doświadczeniami / przemyśleniami.

Pozdrawiam noworocznie i przepraszam za przydługawe wywnętrznienia.
Andrzej
  • 0

#2
Kamil

Kamil

    Contao ambassador

  • Administratorzy
  • 1 538 postów
  • Strona www:zobacz
  • LokalizacjaLidzbark Warminski
Wydaje mi się, że ta funkcja jest na tyle prosta, że można ją spokojnie pominąć i za każdym razem mnożyć te dane:

$foobar = $objDane->width * $objDane->height;
// ...
$foobaz = $objDane->width * $objDane->height;
Nawet można pokusić się o przeniesienie tego do MySQL:

SELECT (width * height) AS multiplied FROM tl_tabela

Jeżeli planujesz jakoś rozbudować te obliczenia (np. zaokrąglić dane do setek czy tysięcy), to wtedy jak najbardziej użyj osobnej funkcji.
  • 0

Codefog - Contao web development





Użytkownicy przeglądający ten temat: 1

0 użytkowników, 1 gości, 0 anonimowych użytkowników