Edit a Delete dat z databáze
- Raziner
- Člen | 5
Dobrý den, omlouvám se, že znova otravuji. Dostal jsem se do fáze, kdy mám vytvořený formulář, který mi vytvářejí data (něco na způsobu článků) a zapisují se do databáze a vykreslují se v šabloně. Ale, mám problém s editací a deletováním dat. Když chci editovat data, tak se spíše vytvoří nové a to nechci a když mačkám na button s deletem, tak se data nesmažou. Byl bych rád za každou radu :).
Zde je presenter:
class LoggedPresenter extends Nette\Application\UI\Presenter {
private $database;
public function __construct(Nette\Database\Context $database) {
$this->database = $database;
}
public function renderDefault() {
$this->template->data = $this->database->table('t_org')
->limit(5);
}
public function renderShow($postId) {
$this->template->post = $this->database->table('t_org')->get($postId);
}
protected function createComponentCreateForm() {
$form = new UI\Form;
$form->setRenderer(new BootstrapRenderer);
$form->addText('name', 'Name')
->setRequired('Name is required!');
$form->addText('description', 'Description');
$form->addText('endpoint', 'Endpoint')
->setRequired('Endpoint is required!');
$form->addText('email', 'Login')
->setRequired('Email is required!')
->setType('email')
->setAttribute('placeholder', 'E-mail')
->setAttribute('autofocus');
$form->addPassword('password', 'Password')
->setRequired('Password is required!')
->setType('password')
->setAttribute('placeholder', 'Heslo')
->setAttribute('autofocus');
$form->addSubmit('create', 'Create')
->setAttribute('class', 'btn btn-lg btn-primary btn-block center');
$form->onSuccess[] = [$this, 'createFormSucceeded'];
return $form;
}
public function createFormSucceeded($form, $values) {
$postId = $this->getParameter('postId');
if ($postId) {
$post = $this->database->table('t_org')->get($postId);
$post->update($values);
} else {
$this->database->table('t_org')->insert(array(
'id_owner' => $this->getUser()->getId(),
'id_created' => $this->getUser()->getId(),
'id_updated' => $this->getUser()->getId(),
'active' => true,
'id' => $postId,
'name' => $values['name'],
'description' => $values['description'],
'endpoint' => $values['endpoint'],
'login' => $values['email'],
'pwd' => $values['password'],
));
}
$this->flashMessage('confirmed', 'Confirmed');
$this->redirect('Logged:');
}
public function actionEdit($postId) {
$post = $this->database->table('t_org')->get($postId);
if (!$post) {
$this->error('Příspěvek nebyl nalezen');
}
$this['createForm']->setDefaults($post->toArray());
}
public function handleCreate($user) {
$this->redrawControl('getUser');
}
function handleDelete($postId)
{
$$this->database->table('t_org')->where('id', $postId)->delete();
$this->redirect('Logged');
}
public function handleLogout() {
$this->user->logOut();
$this->flashMessage('You were logged off.');
$this->redirect('Homepage:');
}
}\--
Model:
<?php
namespace App\Model;
use Nette;
use Nette\Database\Context;
use Nette\Database\Table\ActiveRow;
use Nette\Database\Table\IRow;
use Nette\Database\Table\Selection;
use Nette\Utils\ArrayHash;
class CreateData {
use Nette\SmartObject;
private $context;
public function __construct(Nette\Database\Context $context) {
$this->context = $context;
}
public function getPublicArticles() {
return $this->context->table('t_org')
->where('created_at < ', new \DateTime)
->order('created_at DESC');
}
/** Konstanty pro manipulaci s modelem. */
const
TABLE_NAME = 't_org',
COLUMN_ID = 'id',
COLUMN_NAME = 'name',
COLUMN_DESCRIPTION = 'description',
COLUMN_ENDPOINT = 'endpoint',
COLUMN_EMAIL = 'email',
COLUMN_URL = 'url';
/**
* Vrátí seznam článků v databázi.
* @return Selection seznam článků
*/
public function getArticles()
{
return $this->context->table(self::TABLE_NAME)->query('SELECT * FROM table WHERE id_owner = ?', $getUser)->order(self::COLUMN_ID . ' DESC');
}
/**
* Vrátí článek z databáze podle jeho URL.
* @param string $url URl článku
* @return bool|mixed|IRow první článek, který odpovídá URL nebo false při neúspěchu
*/
public function getArticle($url)
{
return $this->context->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->fetch();
}
/**
* Uloží článek do systému. Pokud není nastaveno ID, vloží nový, jinak provede editaci.
* @param array|ArrayHash $article článek
*/
public function saveArticle($article)
{
if (!$article[self::COLUMN_ID])
$this->context->table(self::TABLE_NAME)->insert($article);
else
$this->context->table(self::TABLE_NAME)->where(self::COLUMN_ID, $article[self::COLUMN_ID])->update($article);
}
/**
* Odstraní článek.
* @param string $url URL článku
*/
public function removeArticle($url)
{
$this->context->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)->delete();
$this->redirect('Logged:');
}
}
- Ondřej Kubíček
- Člen | 494
mrkni na tenhle example – https://github.com/…D-collection je to tam přesně řešené insert, update, delete