Nette\Database – primární klíč nad více sloupci

- spidy
 - Člen | 55
 
Když mám v tabulce definovaný primární klíč nad více sloupci,
vyhazuje Nette\Database výjimku
Nette\NotSupportedException: Table permission does not have any primary key.
například při procházení pomocí foreach. Asi není co dodat, takže se
rovnou zeptám: Dá se s tím něco dělat, nebo si musím zprasit databázi a
přidat do všech spojovacích tabulek sloupec s AI?

- spidy
 - Člen | 55
 
Kód zaslat můžu, ale je takový trochu složitější…
...
$permissions = $this->getPermissions()->where('viewer_id', $user->id)
                        ->where('creator_id NOT IN ?',
                            $this->getPermissions()->where('viewer_id', $this->identity->id)->select('creator_id')
                        )
                        ->select('creator_id, '. $this->identity->id. ' AS viewer_id');
$this->connection->beginTransaction();
foreach ($permissions as $permission) {
    $this->getPermissions()->insert($permission);
}
...
Chyba nastává u toho foreach…

- ZZromanZZ
 - Člen | 87
 
Myslis pokud mam pole indexovane dle primarniho klice, typicky treba v nejakem gridu a potrebuju se pak dle tohoto primarniho klice odkazat na databazovy radek kvuli editaci ? „idPrvnihoSloupce-idDalsihoSloupce-…atd“ a pak to parsovat ? Jenom tak strilim
Editoval ZZromanZZ (2. 9. 2012 23:13)

- castamir
 - Člen | 629
 
složený PK by tedy měl být asi v té metodě jako asociativní pole, že? takže by neměl být problém to automaticky převést na where() v případě, že parametr find() resp get() bude pole (is_array() === TRUE)
EDIT:
public function find($key) {
    if (is_array($key)) {
        return $this->where($key);
    } else {
        return $this->where($this->primary, $key);
    }
}
public function get($key) {
    $clone = clone $this;
    if (is_array($key)) {
        $clone->where($key);
    } else {
        $clone->where($this->primary, $key);
    }
    return $clone->fetch();
}
Výše zmíněné řešení je ovšem velmi obecné a neručí na vyhledávání pouze podle PK.
Ráno omrknu jak se nastavuje atribut primary a jeho chování u různých tabulek a pak ty 2 metody zkusím doladit…
Editoval castamir (3. 9. 2012 3:05)