Jak spravne pojmenovat tabulky pro Nette\Database s vice FK na stejne PK
- David Růžička
- Člen | 43
Teď jsem to zrovna řešil. Pojmenovaný to máš dobře. Pro přístup k položkám přes klíč, jehož název neodpovídá názvu cílové tabulky, musíš použít druhý parametr metody ref() nebo related(). Například když chceš přes superior_id z tabulky posts získat záznam z tabulky users:
foreach ($database->table('posts') as $post)
{
echo $post->users->name;
echo $post->ref('users', 'superior_id')->name;
}
Bohužel s tím ref() mám teď trochu problémy a funguje mi to jen když vymažu cache.
- hrach
- Člen | 1838
Že si napíšeš vlastní vlastní reflection (z hlavy, netestovano)
class MyReflection extends Nette\Database\Reflection\DiscoveredReflection
{
public function getBelongsToReference($table, $key)
{
if ($key === 'parent') {
return array($table, 'parent_id');
}
return parent::getBelongsToReference($table, $key);
}
}
edit: upraveno, ale stale netestovano ;)
Editoval hrach (11. 1. 2012 12:41)
- ViPEr*CZ*
- Člen | 817
Já zase třeba zkoušel toto:
$respons->ref('user', 'userID')->ref('contact', 'contactID')
První ref proběhne OK, protože $response ví o sloupci userID a jeho hodnotách co jsem tak zjistil. Ale ten druhej ref už neprojde. Ten vrátí NULL, protože jestli tomu dobře rozumím, tak funkce protected getReference nejspíš nenajde správnou hodnotu pro value nad sloupcem contactID.