Získání jména redaktora dle ID z jiné tabulky (Context error)
- k4znIm
- Člen | 3
Ahoj,
začínám s nette a mám problém s databázemi.
Připojení do databáze mám přes config.neon a to funguje, pak mám načítání příspěvku z jedné tabulky, kde vlastně načtu nadpis datum a id autora.
Tady nastává problém, vše bez problému vypíši, ale co pochopitelně nechci je ID autora, ale jeho jméno. To ej ale v jiné tabulce, takže potřebuji nějak pracovat i s tou druhou tabulkou (admins).
Podle toho, co jsem se dočetl je na to ideální Nette Database Explorer.
Prošel jsem si tedy návod
zde https://doc.nette.org/…ase/explorer#…
Bohužel mi traci vypisuje, že nezná context. Tak hledám dál a najdu toto.
https://api.nette.org/…Context.html (jako začátečník jsem to toho vlastně nic moc nevyčetl)
a pak
https://doc.nette.org/…atabase/core#…
ale nikde se tu nezmiňují o tom context. Co jsme pochopil, vše potřebné by si to mělo vytvořit samo, protože jsme použil připojení přes config.neon a vážně netuším, kde tedy může být chyba.
<?php
namespace App\Presenters;
use Nette;
class HomepagePresenter extends BasePresenter {
private $database;
// pro práci s vrstvou Database Explorer si předáme Nette\Database\Context
public function __construct(Nette\Database\Connection $database) {
$this->database = $database;
}
public function renderDefault() {
$articles = $context->table('articles');
foreach ($articles as $article) {
echo 'title: ' . $article->title;
echo 'describe: ' . $article->describe;
echo 'creators: ';
foreach ($article->related('admins') as $creator) {
echo $creator->jmeno . ', ';
}
}
}
}
?>
popravdě ani pořádně nevím, jak zde myslí předat, já myslel, že to už si zařizuje samo..
„pro práci s vrstvou Database Explorer si předáme Nette\Database\Context“
Kdyby se tu našel někdo tak hodný a vysvětlil by mi, jak na to, nebo co vlastně hledám.. Už jsem z toho docela zmatenej, kolik jsme toho přečetl a nikde ani zmínka o „Undefined variable: context“.
Děkuju :)
- David Matějka
- Moderator | 6445
ten context si predej pres konstruktor jako to nyni delas s database connection – a tu connection muzes pote smazat.
- duke
- Člen | 650
David Matějka napsal(a):
ten context si predej pres konstruktor jako to nyni delas s database connection – a tu connection muzes pote smazat.
To mi pak ale bude vypisovat, že nezná $database ne? Jsem z toho fakt už dneska úplně zmatenej..
Nebude (když tu proměnnou $connection
všude nahradíš tím
$context
). Nette\Database\Context je služba, která v sobě
udržuje odkaz na službu Nette\Database\Connection, neboť ji vnitřně
využívá. Je to vlastně taková obálka nad ní, poskytující funkcionalitu
navíc. Pokud bys tu Connection potřeboval přímo, můžeš přes
$context->getConnection()
, nebo i zkráceně přes
$context->connection
.
Editoval duke (11. 12. 2017 19:09)
- k4znIm
- Člen | 3
duke napsal(a):
David Matějka napsal(a):
ten context si predej pres konstruktor jako to nyni delas s database connection – a tu connection muzes pote smazat.
To mi pak ale bude vypisovat, že nezná $database ne? Jsem z toho fakt už dneska úplně zmatenej..
Nebude (když tu proměnnou
$connection
všude nahradíš tím$context
). Nette\Database\Context je služba, která v sobě udržuje odkaz na službu Nette\Database\Connection, neboť ji vnitřně využívá. Je to vlastně taková obálka nad ní, poskytující funkcionalitu navíc. Pokud bys tu Connection potřeboval přímo, můžeš přes$context->getConnection()
, nebo i zkráceně přes$context->connection
.
Jasný, takže pak to nepotřebuji, jak psal už David..
<?php
namespace App\Presenters;
use Nette;
class HomepagePresenter extends BasePresenter {
private $database;
// pro práci s vrstvou Database Explorer si předáme Nette\Database\Context
public function __construct(Nette\Database\Context $context) {
$this->context = $context;
}
public function renderDefault() {
$articles = $context->table('articles');
foreach ($articles as $article) {
echo 'title: ' . $article->title;
echo 'describe: ' . $article->describe;
echo 'creators: ';
foreach ($article->related('admins') as $creator) {
echo $creator->jmeno . ', ';
}
}
}
}
?>
Takže vlastně takto, pokud rozumím? Ale je to read-only, takže se tomu zase něco nelíbí.. (omlouvám se, ale fakt tomu ještě moc nerozumím :D ) Kdyby jsi mi to mohl ukázat na tom kódu mém, byl bych moc rád, potřeboval bych to vidět.. Potřebuji jen ze 2 tabulek získávat data (articles-title,posted,creator(id) — admins-name(podle toho id))
- David Matějka
- Moderator | 6445
v konstruktoru zapisujes do context
$this->context = $context;
ale clenska promenna se ti jmenuje database
private $database;
a pak k tomu pristupujes jako k lokalni promenne a ne jako k clenske promenne
$context->table(...