Update a insert v 1 action, znovupoužití dat
- Koupilsemto
- Člen | 38
Dobrý den, potřeboval bych pomoc ještě s 1 věcí. Při kliknutí na tlačítko rezervovat v seznamu knih se mi do tabulky log zapíší data do sloupů ID_knihy, ID_users, akce a date to funguje na 100%. Potom si za „administrátora“ zobrazím všechny rezervované akce z tabulky log abych je mohl připravit pomocí actionPripravit.
Tímto začíná můj problém. Chtěl bych, aby se po kliknutí na actionPripravit provedlo:
- Změnit stav v tabulce Knihy sloupci stav na Připravena k vyzvednutí
- Vemou se data z logu na který jsem klik a znovu se vloží ty samé do tabulky Log s jinou akce (Připravena k vyzvednutí) a časem.
Problem: Call to a member function update() on null nebo update() on boolean
V Latte mám <a n:href=„Post:pripravit“ >Připravit</a>
public function actionPripravit($postId) {
$this->template->log = $this->database->table('log');
$book = $this->database->table('knihy')->get($postId);
$post->update(['stav' => "Připravena k vyzvednutí",]);
$post = $this->database->query('INSERT INTO log', [
'ID_knihy' => $book->ID,
'ID_users' => $this->user->getId(),
'akce' => 'Připravena k vyzvednutí',
'date' => new \DateTime('-1 hour')
]);
$this->flashMessage('Uspěšně připraveno.', 'success');
$this->redirect('Knihyinfo:rezervovane');
}
2 Pokus končí chybovou hláškou LOG nenalezen:
public function actionPripravit($postId) {
$this->template->log = $this->database->table('log');
$book = $this->database->table('knihy')->get($postId);
$logs = $this->database->table('log')->get($postId);
if (!$logs) {
$this->error('Log neexistuje.');
}
$book->update(['stav' => "Připravena k vyzvednutí",]);
$data = [
'ID_knihy' => $book->ID,
'ID_users' => $this->user->getId(),
'akce' => 'Připravena k vyzvednutí',
'date' => new \DateTime()
];
$this->database->table('log')->insert($data);
}
Promintě delší dotaz doufám že srozumitelně napsán… a za vše díky
Editoval Koupilsemto (1. 6. 2018 22:41)
- Mortisson
- Člen | 21
Tak ten první případ je jasný proč ti nefunguje. Deklaruješ si proměnnou $post až pod tím než na ní voláš update.
U toho druhého způsobu špatně používáš funkci get(). Ta vrací řádek podle primárního klíče. V $postId, předpokládám, máš uložené id knihy, proto by to vytahování z logu mělo vypadat asi takhle:
<?php
$logs = $this->database->table('log')->where(['ID_knihy' => $postId])->fetch();
?>