FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Hej
Mitt scenario är att jag försöker bygga ett system där man kan skapa ett oändligt antal med underkategorier och jag kan inte riktigt lura ut hur jag ska göra detta i Codeigniter, där det blir extra svårt på grund av mcv-uppdelningen. Min databastabell kan jag designa om ifall det är den bästa lösningen, men just nu har den fälten "id, parent, name" där parent alltså är id:t av en annan kategori eller tomt om kategorin inte är en underkategori. För att skriva ut det här skulle man ju vanligtvis kunnat skriva någon typ av rekursiv funktion som använder sig av flera mysql-satser och direkt skriver ut dem sedan... men med MVC, hur gör man då? Jag behöver alltså en modellfunktion som hämtar all data som behöver hämtas, detta ska vi controllern skickas till viewn i form av en array. Det är viktigt att systemet kan hantera ett oändligt antal kategorier och underkategorier. |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Har WN som tidsfördriv
|
Jag förstår inte riktigt problemet. Vad har det här med MVC att göra?
I CI kan du skriva helt egna MySQL queries, sedan är det bara att köra $result = $this->db->query(' sql .. '); Och köra på precis som vanligt ![]() |
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
Nej, för jag kan ju inte echoa direkt så jag måste spara det på något sätt, t.ex. i en array så att jag kan skriva ut den arrayen senare, i viewn. Jag har letat upp ett exempel på vad jag menar, visa mig hur jag kan skriva följande för codeigniter:
Kod:
function display_children($parent, $level) { // retrieve all children of $parent $result = mysql_query('SELECT title FROM tree '. 'WHERE parent="'.$parent.'";'); // display each child while ($row = mysql_fetch_array($result)) { // indent and display the title of this child echo str_repeat(' ',$level).$row['title']."\n"; // call this function again to display this // child's children display_children($row['title'], $level+1); } } Den koden skriver ut informationen... men det gör den genom att köra en ny query för varje nivå. Visst, jag kan köra flera queries, men det måste ske i modellen. Och därifrån kan jag inte echoa. Jag är kanske inte jättebra på att förklara.. men är det någon som förstår mitt problem? Här är en liten början: Kod:
<?php class Articles_model extends Model { $categories[] = ''; function articles_model() { parent::Model(); } function get_categories($parent) { $result = $this->db->where('parent', $parent) ->order_by('parent', 'asc') ->get('articles_categories') ->result_array(); foreach($result as $category) { } } } ?> Senast redigerad av Althalos den 2010-01-28 klockan 21:06 Anledning: Förklara varför vad categories[] är till för :-) |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Supermoderator
|
Jag kan inte CI men att köra flera queries låter inte som en bra idé.
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
Hur ska jag göra då? Annan struktur på databasen?
|
||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Medlem
|
Hierarkisk data bör hanteras som med nested set-metoden enligt vad som beskrivs bra här: http://dev.mysql.com/tech-resources/...ical-data.html
Jag skrev också ett blogginlägg för länge sedan om hur man jobbar med sortering i php/javascript http://www.dotvoid.com/page/3/. Att jobba "traditionellt" med hierakisk data i sql är inte så lysande prestandamässigt om du t ex ofta ska visa ett helt träd. |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Medlem
|
Tack, det var precis vad jag behövde. Kunde nu också söka mer specifikt och hittade då ett speciellt library för CI som använde det din länk beskriver.
|
||
![]() |
![]() |
Svara |
|
|