Pieduriens Posted October 14, 2013 Report Share Posted October 14, 2013 (edited) Šodien sapratu ka manam menu ir nepieciešama arī itemu dzēšanas opcija :)) Iekš CodeIgniter mēģinu izveidot funkciju. Nepieciešams array kurš tiku padots uz db dzēšanai. $selected_items_by_id = array('1','2','3','4',); // --<<<Nepieciešams izveidot šo. $this->db->where_in('id', $selected_items_by_id); $this->db->delete('mytable'); ( Šajā piemērā rādu ka esmu ielicis iekš array Item1 un visus tā subus. ) mytable DB struktūra: ID | NAME | PARENT_ID 1 Item1 0 // Pirmais Root items 2 Item2 1 // Pirmais Root sub items 3 Item3 2 // Pirmais Root sub sub items 4 Item4 3 // Pirmais Root sub sub sub items 5 Item5 0 // Otrais Root items Struktūra Item1+Item2++Item3+++Item4Item5 Šādi es saņemu id no input formas: $id = $this->input->post('delete_menu_item'); Loģika:Ja itema parent_id ==0, tad tas ir root items. Ja items ir roots, tad iekš array būt tikai roota id. Iekš array jāieliek itema id un visi sub id ( ja tādi ir) Saprotu, ka te atkal darbs rekursīvai funkcijai, taču šādas funkcijas izveide vēl sagādā galvassāpes. Paldies. Edited October 14, 2013 by Pieduriens Quote Link to comment Share on other sites More sharing options...
F3llony Posted October 14, 2013 Report Share Posted October 14, 2013 Jau iepriekšējā topikā es tev iemetu darbojošu funkciju, kas uzbūvē šādu koku. Lai saprastu rekursiju, tev vispirms jāsaprot rekursija. Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 14, 2013 Author Report Share Posted October 14, 2013 Jau iepriekšējā topikā es tev iemetu darbojošu funkciju, kas uzbūvē šādu koku. Lai saprastu rekursiju, tev vispirms jāsaprot rekursija. Nu rekursīvs piemērs varētu būt šāds: <?php $var = 0; function recursive($var){ if ($var == 10){ echo 'Merkis sasniegts: $var tagat ir: '.$var; } else{ $var++; echo $var.'. rinkis<br>'; recursive($var); } } recursive($var); ?> Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 15, 2013 Author Report Share Posted October 15, 2013 Pēc dienas mocīšanās izskatās ka te vienkārši ar rekursīvu funkciju nebūs nekas līdzēts. http://pastebin.com/ZjY2Bcgk Loģikā neizprotu to, kā iestāstīt ka Itemam1 var būt arī subi. Vienīgais atslēgas posms ir parent_id , kurš ja ir == 0 norāda tikai to ka tas ir root items. Bet Rootam jau var būt subi. Nepietiekama struktūra DB? Skatoties pastebin function search atdala izvēlēto itemu atseviškā array. Funkcija build_array meiģina veidot array. Ieteikumi? Quote Link to comment Share on other sites More sharing options...
F3llony Posted October 15, 2013 Report Share Posted October 15, 2013 Ko tu gribi panākt? Izdzēšot parentu izdzēst arī childus? Ja tā, tad tas visvienkāršāk realizējams ar foreign key uz itemu kur parent_id ir foreign key uz tās pašas tabulas id ar null parent_id root elementam, on delete cascade vai ja tev ir kaut cik advancēts ORM (izskatās, ka nē) - ar modeļu on_delete eventu izdzēs chaildus caur modeļiem un tā līdz bezgalībai. Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 15, 2013 Author Report Share Posted October 15, 2013 (edited) Ko tu gribi panākt? Izdzēšot parentu izdzēst arī childus? Ja tā, tad tas visvienkāršāk realizējams ar foreign key uz itemu kur parent_id ir foreign key uz tās pašas tabulas id ar null parent_id root elementam, on delete cascade vai ja tev ir kaut cik advancēts ORM (izskatās, ka nē) - ar modeļu on_delete eventu izdzēs chaildus caur modeļiem un tā līdz bezgalībai. Jā, izdzēšot vērtīgāku itemu izdzēš arī nevērtīgākus ( childus ). Par foreign key nebiju iedomājies. Izmantoju CodeIgniter. Sapratu, ka par 100% nemāku nodefinēt savu problēmu. Laikam jācitē šis: "Manuprāt, tev ar steigu ir jāizlasa grāmatas (kaut vai daiļliteratūra) 10 000 lapaspušu apmēra un pēc tam jāuzraksta 50 esejas, lai tu iemācītos formulēt savu domu. Lasot tu apgūsi izteiksmes paternus, bet rakstot iemācīsies tos pielietot." (Codez) Edited October 15, 2013 by Pieduriens Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 15, 2013 Author Report Share Posted October 15, 2013 Vai tad iekš phpmyadmin patstāvīgi nevar uzstādīt foreign key? Quote Link to comment Share on other sites More sharing options...
F3llony Posted October 15, 2013 Report Share Posted October 15, 2013 Vai tad iekš phpmyadmin patstāvīgi nevar uzstādīt foreign key? 1. Tabulu dzinējiem jābūt InnoDB 2. Itkā vajadzētu ļaut. PHPmyadmin nelietoju. Nezinu. Meklē manuālī. Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 15, 2013 Author Report Share Posted October 15, 2013 (edited) 1. Tabulu dzinējiem jābūt InnoDB 2. Itkā vajadzētu ļaut. PHPmyadmin nelietoju. Nezinu. Meklē manuālī. 1. Man ir tikai viena tabula priekš navigation. ( InnoDB). 2. Cik saprotu, šeit runa ir tikai par pareizo indexu salikšanu. Kāda būtu ši izteiksme @ sql?: visvienkāršāk realizējams ar foreign key uz itemu kur parent_id ir foreign key uz tās pašas tabulas id ar null parent_id root elementam, on delete cascade Edited October 15, 2013 by Pieduriens Quote Link to comment Share on other sites More sharing options...
Pieduriens Posted October 16, 2013 Author Report Share Posted October 16, 2013 (edited) Paldies par F3llony ieteikumiem :))) Jūtos laimīgs! Gala rezultāts: CREATE TABLE `navigation` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL COLLATE 'utf8_general_ci', `url` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci', `position` MEDIUMINT(8) NOT NULL DEFAULT '100', `parent_id` INT(11) NOT NULL, PRIMARY KEY (`id`), INDEX `parent_id` (`parent_id`), CONSTRAINT `FK1` FOREIGN KEY (`parent_id`) REFERENCES `navigation` (`id`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='utf8_unicode_ci' ENGINE=InnoDB; Edited October 16, 2013 by Pieduriens Quote Link to comment Share on other sites More sharing options...
jurchiks Posted October 16, 2013 Report Share Posted October 16, 2013 COLLATE='utf8_unicode_ci' Cik es esmu lasījis, CHARSET un COLLATE vērtības nedrīkst likt pēdiņās, nestrādājot or smth. Tas pats ar, piemēram, "SET NAMES utf8" utml. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.