Grid – označení více řádků a jejich dupliakce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Desttro
Člen | 126
+
0
-

Zdravím,
řešil někdo duplikaci/kopírování řádku v gridu? Např: Mám Grido, zde v pravo mohu pomocí checkboxů vybrat několik položek – vyberu je. Potom je dole selectbox a vyberal bych duplikovat – zduplikuje to přesně ty vybrané řádky ale samozřejmě s jiným ID.

Nevím ani jak to udělat u jedné položky.

Takhle jsem vyřešil mazání, ale nemohu přijít na duplikaci.

public function actionDelete()
{
    $id = $this->getParameter('id');
    $id_out = is_array($id) ? implode(', ', $id) : $id;
    $this->database->table('manufacturing')->where('id', $id)->update(array('trash' => '1'));
    $this->flashMessage("Action '$this->action' for row with id: $id_out done.", 'success');
    $this->redirect('default');
}

ve skutečnosti nemažu ale jenom nastavuju sloupeček trash na 1 a v modelu mám ať vypíše pouze s „trash“ kde je 0

děkuji za rady

Pavel Kravčík
Člen | 1196
+
0
-

Uděláš to úplně stejně. Máš to dokonce i napsané v dokumentaci.

	$grid->setOperation(array('delete' ⇒ 'Delete'), function($operation, $id) { … } );

Vytáhneš si z těch dat, co posíláš do modelu podle $id ty k zduplikování. Smažeš jim $id a použiješ insert() nebo jakkoliv jinak je zduplikuješ. A profit.

Desttro
Člen | 126
+
0
-

Děkuji, no, a co dát do parametrů toho insert()?

$this->database->table('manufacturing')->insert();

Má tam být pole těch dat, ale nejlépe bych chtěl ať si je veme automaticky, nebo to můsím předávat nějak parametry?

Děkuji

edit:

zkouším něco jako:

$data = $this->database->table('manufacturing')->where('id', $id);
$this->database->table('manufacturing')->insert($data);

ale hází to
Notice
Array to string conversion

Editoval Desttro (13. 2. 2015 11:30)

Desttro
Člen | 126
+
0
-

Už se mi to povedlo, ale dotaz mi tam dáví i ID a logicky to neprojde kvůli diplikaci primárního klíče.
Funguje ActiveRow jako pole? Jak z toho mohu nullovat to ID, nebo smazat? Aby se tam dosadilo nové?

Děkuji

Pavel Kravčík
Člen | 1196
+
+1
-
$array = ActiveRow->toArray();
unset($array['id']);
Desttro
Člen | 126
+
0
-

Děkuji, funguje.

Mě ještě napadlo tohle:

$array->id = NULL;

Ale nejde to:
Nette\DeprecatedException
ActiveRow is read-only; use update() method instead.

rozumím tomu, ale nevím proč je to read-only

Pavel Kravčík
Člen | 1196
+
0
-

Protože ActiveRow je řádek DB a neměl by jít upravit. Zkus prohledat fórum, je tu k tomu mnoho fundovanějších vysvětlení.