Unexpected type of parameter: array
- janbenes123
- Člen | 3
Zdravím, mám tento druh pole, který se snažím poslat do databáze, problém nastává u pole ‚product_labels‘
array
'title' => 'Product 3'
'price' => '65'
'published_at' => '2022-08-31'
'category' => 'B'
'product_labels' => array
0 => 'E'
1 => 'F'
'active' => true
Po odeslání formuláře, si zavolám metodu postFormSucceeded() a předám jí parametry výše, má otázka je, proč mi tracy hlásí Unexpected type of parameter: array, jako databázi používám MySQL, přes PhPmyadmin, datový typ ‚product_labels‘ mám nastaven jako ENUM, zkoušel jsem i SET, ale výsledek je totožný.
public function postFormSucceeded(array $data): void
{
$post = $this->database
->table('posts')
->insert($data);
$this->flashMessage("Úspěšně vytvořeno/uloženo.", 'success');
$this->redirect('Post:show', $post->id);
}
Děkuji.
- Marek Bartoš
- Nette Blogger | 1274
A jak by se pole do sloupce v databázi mělo vložit? Enum dovoluje pouze jednu hodnotu, ne více. Více hodnot se standardně řeší vazbou na další tabulku.
- Pavel Kravčík
- Člen | 1195
Pokud nad tím nepotřebuješ často vyhledávat (v novějších verzích MySQL už nově jde), tak používáme JSON.
- janbenes123
- Člen | 3
Udělal jsem menší prasárnu, ale pro mé potřeby to stačilo.
public function postFormSucceeded(array $data): void
{
$data['product_labels'] = json_encode($data['product_labels']);
$data['product_labels'] = str_replace(array('[',']',"\""),'',$data['product_labels']);
$id = $this->getParameter('id');
if ($id) {
$post = $this->database
->table('posts')
->get($id);
$post->update($data);
} else {
$post = $this->database
->table('posts')
->insert($data);
}
$this->flashMessage("Úspěšně vytvořeno/uloženo.", 'success');
$this->redirect('Post:show', $post->id);
}
Po úpravě vypadají data co ukládám do databáze takto. Nevěděl jsem, že databáze nepřijímá array. Jsem zelenáč.
array
'title' => 'Product 1'
'price' => '85'
'published_at' => '2022-09-16'
'category' => 'C'
'product_labels' => 'D,E'
'active' => true
Děkuji za pomoc.
- m.brecher
- Generous Backer | 871
@PavelKravčík omlouvám se za odbočení od tématu vlákna, „v novějších verzích MySQL už nově jde vyhledávat“ – máš na mysli fulltextové vyhledávání? To tradičně v MySQL nebylo moc prakticky použitelné, nově je to dobře udělané? Máš s tím nějaké praktické zkušenosti?
Editoval m.brecher (12. 9. 2022 20:54)
- Pavel Kravčík
- Člen | 1195
m.brecher napsal(a):
@PavelKravčík omlouvám se za odbočení od tématu vlákna, „v novějších verzích MySQL už nově jde vyhledávat“ – máš na mysli fulltextové vyhledávání ?? To tradičně v MySQL nebylo moc prakticky použitelné, nově je to dobře udělané ?? Máš s tím nějaké praktické zkušenosti ??
Řešili jsme to v době, kdy nám přišlo zajímavé použít to pro nějaké uživatelské nastavení, které se převážně jen čte (např. otevřené či zavřené menu v administraci apod.). Ale v té době (myslím 5.5) to naše DB vůbec nepodporovala, takže jsme to vlastně nepoužili (kromě malého blogu na tagy). Na nějaké hledání stále preferujeme nějakou vazební tabulku. Na full-text bude lepší Elastic.
- janbenes123
- Člen | 3
Pepino napsal(a):
@janbenes123 koukni na funkce implode a explode
Děkuji, o tomto jsem nevěděl.