Vypsání počtu řádkú výsledku pro všechny prvky foreach
- erehulka
- Člen | 5
Dobrý deň,
na mojej stránke potrebujem zobraziť počet turnusov pre každý zájazd. Zájazdy mám v jednej tabuľke databázy, turnusy v inej. Môžem ich vyhľadávať pomocou názvu destinácie, alebo prvku destinacie_id v tabuľke turnusy (a teda related(‚turnusy‘) atď.) Vyzerá to asi nejak takto:
"":https://drive.google.com/…xC3b3gr/view?…
To 1 je tam iba ako placeholder. Moja otázka teda je, že ako viem pre každý prvok {foreach} nájsť všetky turnusy v inej tabuľke databázy? Skúšal som niečo takéto:
{foreach $dests as $dest}
...
<span style="font-size:24px;"> <strong>{include 'turnusy.latte' id => $dest->id} </strong></span>turnusov
...
{/foreach}
ibaže keď som aj spravil renderTurnusy v presenteri a turnusy.latte, kam som posunul $destId a snažil sa hľadať v databáze, tak mi to nešlo. Vedeli by ste mi prosím pomôcť? Ďakujem.
- Polki
- Člen | 553
První nápad (možná né dobrý) je použít ORM, nebo při použití Nette Database si udělat i tak entitu.
například:
zajezd.php:
<?php
namespace App\Model;
use Nette;
use Nette\Utils\ArrayHash;
use Nette\Database\Table\ActiveRow;
use Nette\Database\Context;
/**
* @property-read int $id
* @property string $imgPath
* @property string $name
* @property string $description
* @property float $price
* @property-read int $pocetTurnusu
*/
final class zajezd {
use Nette\SmartObject;
/** @var Nette\Database\Context */
private $db;
/** @var ArrayHash */
private $data;
public function __construct(ActiveRow $data, Context $db) {
$this->data = ArrayHash::from($data->toArray());
$this->db = $db;
}
public function getId() {
return $this->data->id;
}
public function getImgPath() {
return $this->data->imgPath;
}
public function getName() {
return $this->data->name;
}
public function getDescription() {
return $this->data->description;
}
public function getPrice() {
return $this->data->price;
}
public function getPocetTurnusu() {
$this->db->table('turnusy')
->where('zajezd.id', $this->data->id)
->count();
}
public function setImgPath($value) {
$this->data->imgPath = $value;
}
public function setName($value) {
$this->data->name = $value;
}
public function setDescription($value) {
$this->data->description = $value;
}
public function setPrice($value) {
$this->data->price = $value;
}
public function save() {
$this->db->table('zajezdy')
->where('id', $this->data->id)
->update($this->data);
}
}
zajezdManager.php:
...
public function getZajezd($id) {
return new zajezd($this->db->table('zajezdy')->get($id), $this->db);
}
public function addZajezd($data) {
return new zajezd($this->db->table('zajezdy')->insert($data), $this->db);
}
public function getZajezdy() {
$vysledek = [];
$zajezdy = $this->db->table('zajezdy');
foreach ($zajezdy as $zajezd) {
$vysledek[] = new zajezd($zajezd, $this->db);
}
return $vysledek;
}
...
šablona:
{foreach $zajezdy as $zajezd}
...
<span style="font-size:24px;"> <strong>{$zajezd->pocetTurnusu} </strong></span>turnusov
...
{/foreach}
- Polki
- Člen | 553
Samozřejmě lze soubor zajezdy.php zkrátit a to třeba takto:
<?php
namespace App\Model;
use Nette;
use Nette\Utils\ArrayHash;
use Nette\Database\Table\ActiveRow;
use Nette\Database\Context;
final class zajezd {
use Nette\SmartObject;
/** @var Nette\Database\Context */
private $db;
/** @var ArrayHash */
private $data;
public function __construct(ActiveRow $data, Context $db) {
$this->data = ArrayHash::from($data->toArray());
$this->db = $db;
}
public function __get($name) {
if ($name === 'pocetTurnusu') {
return $this->db->table('turnusy')
->where('zajezd.id', $this->data->id)
->count();
}
return $this->data->$name;
}
public function __set($name, $value) {
if ($name === 'pocetTurnusu') {
throw new ReadOnlyException();
} else if ($name === 'id') {
throw new TryToEditIdException();
}
$this->data->$name = $value;
}
public function save() {
$this->db->table('zajezdy')
->where('id', $this->data->id)
->update($this->data);
}
}
- erehulka
- Člen | 5
Related nefunguje, lebo prepisujem starú stránku kde nie je InnoDB a keď sa to snažím zmeniť a pridať do tabuľky turnusy prvok destinacie_id s foreign key v tabuľke destinacie, tak mi to vypíše error:
Cannot add or update a child row: a foreign key constraint fails (
cw010002db.<result 2 when explaining filename '#sql-6ccc_56c3b6'>, CONSTRAINT `#sql-6ccc_56c3b6_ibfk_1
FOREIGN KEY (destinacie_id
) REFERENCES destinacie
(ID
))`
Teda na InnoDB som to zmenil, ale nejde mi pridať ten foreign key.
Tie predošlé možnosti vyskúšam, ďakujem!