Jak správně vytáhnout data z 1:N

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zoool
Člen | 89
+
0
-

Ahoj mám menší problém,
mám produkty vytáhlé z tabulky produktu. a chtych k nim vytahnout obrazáz z tabulky obrazků, prři upřesnění parametrů „hlavni“
asi nějak takto

foreach($this->model->getProdukty() as $produkt)
{
echo $produkt->nazev;
echo $produkt->related("obrazky")->where("hlavni",1)->fetch()->soubor;
}

Problém v tomto řešení je to, že to bere strašně mnoho paměti, když to ale udělám takto

foreach($this->model->getProdukty() as $produkt)
{
echo $produkt->nazev;
echo $this->model->getObrazky()->where(array("hlavni"=>1, "produkty_id" => $produkt->id))
}

tak to relativně správně, ale nemyslím si že je to dobré řešení.

Eda
Backer | 220
+
0
-

Zkus přidat limit…

foreach($this->model->getProdukty() as $produkt)
{
	echo $produkt->nazev;
	echo $produkt->related("obrazky")->where("hlavni",1)->limit(1)->fetch()->soubor;
}

Jakou používáš verzi Nette?

Jaké dotazy skript položí?

zoool
Člen | 89
+
0
-

Použivám nejnovejší nette

Problém je ty v tom že mi to položí na databázi dva dotazy a to jeden vybere všechyn obrázky a až ten druhý tam dá ty podmínky where.

Limit nepomohl

Tabetha
Člen | 140
+
0
-

nástrel od boku…ale použiť join?

hrach
Člen | 1834
+
0
-

Zkus to prosim na teto vetvi: https://github.com/…-refactoring
Tvuj kod

foreach($this->model->getProdukty() as $produkt)
{
	echo $produkt->nazev;
	echo $produkt->related("obrazky")->where("hlavni",1)->fetch()->soubor;
}

je spravny :) takto by se to melo udelat.

axis
Člen | 5
+
0
-

Mám stejný problém, data z related(), select mi vybere celou tabulku keywords a pak ji teprve Nette nějak vyfiltruje, pokud mám větší tabulku, tak mi to skončí na nedostatku paměti.
Zkoušel jsem to na 2.0.4 stab.

public function renderList($id)	{
		$table=$this->context->createLinks(); //ziskame tabulku
		foreach ($table->where('userid = ?',1)->order('id')->limit(10) as $links){
 		  echo '<p>';
		  echo $links->title;
			foreach($links->related('keywords') as $b){
       				echo ' <b>#'.$b->keyword.'</b> ';
    			}
   		  echo '</p>';
		}
	}

SQL: SELECT * FROM keywords

hrach
Člen | 1834
+
0
-

Pouzij verzi od tud, zatim neni jineho zbyti… https://github.com/…-refactoring

axis
Člen | 5
+
0
-

Rád bych, ale na této verzi mi to hlásí

Recoverable Error
Argument 1 passed to Nette\Database\Table\Selection::__construct() must be an instance of Nette\Database\Connection, string given, called in C:\apache\users\nette\my\6\app\models\Links.php on line 12 and defined

class Links extends Selection
   {
       public function __construct(\Nette\Database\Connection $connection)
        {
           parent::__construct('linky', $connection); //line 12
        }
    }

Jen jsem tam nakopíroval adresář Nette, možná tam něco chybí, ale netuším ani zbla co :)

Editoval axis (5. 8. 2012 21:26)

jtousek
Člen | 951
+
0
-

Prohoď parametry v tom volání parent::__construct. ;-)

axis
Člen | 5
+
0
-

Vyřešeno, díky moc