Konfigurační soubor config.neon
- Allconius
- Člen | 317
Ahoj,
jsem úplný začátečník a mám problém s konfiguračním souborem.
Nastavil jsem si v něm spojení do databáze:
database:
dsn: 'mysql:host=xxxxxx;port=3311;dbname=xxxxxx'
user: xxxxx
password: xxxxxxx
options:
PDO::MYSQL_ATTR_COMPRESS: true
lazy: true # navázání připojení až když je poprvé potřeba
# driverClass: .... třída ovladače databáze
debugger: true # zobrazí panel v Tracy baru
explain: true # explain dotazů v Tracy bar
autowired: true # povoleno u prvního spojení
conventions: discovered # nebo 'static' nebo jméno třídy, výchozí je 'discovered'
cílem bylo používat Database Explorer. Ve scriptu pak mám:
<?php
class Model
{
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;
}
}
$prestupky = $context->table('p_t');
foreach ($prestupky as $prestupek) {
echo $prestupek->id;
echo $prestupek->cislo;
}
?>
ale nevytvoří mi to ten $context
a skončí chybou: Fatal
Error: Call to a member function table() on null
pokud vytvořím spojení přes:
<?php
$database = new Nette\Database\Connection($dsn, $user, $password);
?>
a pak dotaz:
<?php
$result = $database->query('SELECT .....
?>
tak mi to funguje
- Gappa
- Nette Blogger | 209
Ahoj,
je potřeba třídu Model
zaregistrovat jako službu:
Přidat tedy do config.neon
něco jako toto (pro tento případ,
nevidím tam žádný namespace):
services:
- Model
Píšu to z hlavy, tak snad jsem to trefil :)
- David Matějka
- Moderator | 6445
ahoj, dle tveho prispevku to vypada, ze pises ten kod mimo tridu. abys pochopil zakladni principy, projdi si nejprve quickstart
- Allconius
- Člen | 317
Ahoj, díky za „nakopnutí“, už to funguje ;-)
<?php
$tempDir = 'tmp';
$dsn = 'mysql:host=xxxxx;port=3311;dbname=xxxx';
$user = 'xxxxx';
$password = 'xxxxx';
$storage = new Nette\Caching\Storages\FileStorage($tempDir);
$connection = new Nette\Database\Connection($dsn, $user, $password);
$structure = new Nette\Database\Structure($connection, $storage);
$conventions = new Nette\Database\Conventions\DiscoveredConventions($structure);
$database = new Nette\Database\Context($connection, $structure, $conventions, $storage);
$prestupky = $database->table('p_t');
foreach ($prestupky as $prestupek) {
echo $prestupek->id;
echo $prestupek->cislo;
}
?>
- Allconius
- Člen | 317
jen ještě dotaz, když chci spojení do více DB musím vytvořit zase:
<?php
$tempDir1 = 'tmp';
$dsn1 = 'mysql:host=xxxxx;port=3311;dbname=DB1';
$user1 = 'xxxxx';
$password1 = 'xxxxx';
$storage1 = new Nette\Caching\Storages\FileStorage($tempDir1);
$connection1 = new Nette\Database\Connection($dsn1, $user1, $password1);
$structure1 = new Nette\Database\Structure($connection1, $storage1);
$conventions1 = new Nette\Database\Conventions\DiscoveredConventions($structure1);
$database1 = new Nette\Database\Context($connection1, $structure1, $conventions1, $storage1);
$data= $database1->table('jina_tabulka');
foreach ($data as $zaznam) {
echo $zaznam->id;
echo $zaznam->cislo;
}
?>
nebo existuje něco jako $connection->changeDB(‚DB1‘) ? ;-)