Zvláštní chování Nette\Database při vkládání dat do druhé databáte

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

Zdravím,

mám problém s vkládáním dat do druhé databáze. První databázi mám normálně nadefinovanou v config.neon, ale druhé připojení k databázi si generuju dynamicky pomocí této funkce:

public function getShopConnection($shop_id){
    $shop = $this->getShopTable()->where('id',$shop_id)->fetch();

    $dsn = "mysql:host=" . $shop->db_server . ";dbname=" . $shop->db_name . "";
    $user = $shop->db_username;
    $password = $shop->db_password;
    $prefix = $shop->db_prefix;
    $connection_shop = new Connection($dsn, $user, $password);
    $database_shop = new Context($connection_shop);

    return $database_shop;
}

Problém je v tom, když chci data vkládat, pomocí tohoto dotazu:

$this->productImportRepository->getShopConnection($shop->id)->table('ps_product')->insert(array(
    'id_product' => 'DEFAULT',
    'id_supplier' => 2,
    'id_manufacturer' => 2,
    'id_category_default' => 2,
    'id_shop_default' => 1,
    'id_tax_rules_group' => 1,
    'on_sale' => 0,
    'online_only' => 0,
    'ean13' => 0,
    'quantity' => 0,
    'minimal_quantity' => 1,
    'price' => 495,
    'wholesale_price' => 0,
    'reference' => 'EEE',
    'out_of_stock' => 2,
    'active' => 0,
    'redirect_type' => 404,
    'available_for_order' => 0,
    'condition' => 'new',
    'show_price' => 1,
    'indexed' => 0,
    'visibility' => 'none',
    'date_add' => $date_add,
    'date_upd' => $date_upd
));

protože mi nette hlásí tuto chybu:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ps_product.id' in 'where clause' search►

Ta chyba je správná, protože tabulka ps_product neobsahuje sloupec id, ale id_product. Nejsem si jist, ale myslím, si, že Nette Database si rovnou vybírá ta vložená data nicméně když mám v tabulce ps_product definovaný primární klíč na id_product proč to vybírá podle id?

Do tabulky ps_product to data vloží správně tam problém není, ale ihned po vložení to hodí již míněnou chybu. Když dotaz složím za pomoci query(), tak vše funguje bez chyby, ale je to otravné vypisovat dlouhý insert přes query().

Nevíte někdo kde by mohl být problém? Jinak používám Nette 2.2.7.

Díky za radu.

quiced
Člen | 85
+
0
-

Super, díky Davide za typ už mi to funguje. Jenom kdyby jsi měl chvilku času, mohl by jsi mi sem napsat co to vůbec reflection a discovered reflection je, rád bych to věděl.

Ještě jednou díky za rychlou pomoc.

David Matějka
Moderator | 6445
+
0
-

reflection je sluzba zajistujici poskytovani par informaci o databazi – prave primarni klic, nebo treba informace o relacich (odkud na jakou tabulku smeruji atd.). Defaultni je „conventional“ reflection, ktera (jak nazev napovida) se ridi konvencema. Tedy napriklad ze PK je id a ze article_id bude vzdy smerovat na tabulku article. Discovered reflection cte tyto informace ze databazoveho schema, takze pozna spravny PK nebo spravne detekuje vazbu, ktera nedodrzuje konvence (napr. ze article_id bude smerovat na tabulku page).

Tohle plati pro 2.2 – v 2.3 doslo k vetsim zmenam.

quiced
Člen | 85
+
0
-

Davide díky za pomoc a vysvětlení.