Update a insert v 1 action, znovupoužití dat

Koupilsemto
Člen | 38
+
0
-

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:

  1. Změnit stav v tabulce Knihy sloupci stav na Připravena k vyzvednutí
  2. 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
+
0
-

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();
?>