Empfehlungen: Erweiterte Suche

HABTM... nur einen teil des datensatzes auslesen

Daten auslesen, verarbeiten und den Views übergeben

HABTM... nur einen teil des datensatzes auslesen

Beitragvon RussianStyle » Do 4. Jun 2009, 23:42

Hi all

habe ein kleines Problem mit HABTM. Ich habe 2 Tabellen, groups und shortmessages, die miteinander per HABTM verknüpft sind. Logischerweise noch eine dritte, groups_shortmessages. Wenn ich volgenden Code verwende
Code: Alles auswählen

$selected_groups = $this->Group->Shortmessage->find('all', array (
            'conditions' => array('Shortmessage.id' => $id),
     )
);
 

kriege ich das:
Code: Alles auswählen

Array
(
    0 => Array
        (
            Shortmessage => Array
                (
                    id => 2
                    user_id => 1
                    title => asdfas
                    text => asd fasdf asdf asdf asdf
                    created => 2009-06-04 02:36:50
                    modified => 2009-06-04 02:36:50
                )
           
            Group => Array
                (
                    0 => Array
                        (
                            id => 64
                            title => test
                            created => 2009-06-04 02:26:34
                            modified => 2009-06-04 02:34:43
                        )

                    1 => Array
                        (
                            id => 63
                            title => mmm
                            created => 2009-06-04 01:59:03
                            modified => 2009-06-04 02:17:24
                        )

                    2 => Array
                        (
                            id => 61
                            title =>  hfjkgh
                            created => 2009-06-03 13:54:59
                            modified => 2009-06-04 01:55:04
                        )

                )

        )

)
 


Ich möchte aber nur die id's der zu der shortmessage gehörenden groups auslesen.

Vielen Dank schon mal im Voraus für Eure Mühe.

MfG
RussianStyle
RussianStyle
 
Beiträge: 7
Registriert: Mi 20. Mai 2009, 13:25
Wohnort: Berlin
CakePHP-Version: 1.2.3.8166 stable
OS: Windows XP SP3

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon euromark » Fr 5. Jun 2009, 00:32

entweder mit containable arbeiten oder das fields array neben den anderen Feldern mit "Shortmessage.id" füllen

SRY!
ich meinte natürlich mit "Group.id" füllen
Zuletzt geändert von euromark am Fr 5. Jun 2009, 08:56, insgesamt 1-mal geändert.
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon RussianStyle » Fr 5. Jun 2009, 01:06

sorry, du hast mich falsh verstanden denk ich
ich will ja die id's der groups, und nicht die id's der shortmessages auslesen
RussianStyle
 
Beiträge: 7
Registriert: Mi 20. Mai 2009, 13:25
Wohnort: Berlin
CakePHP-Version: 1.2.3.8166 stable
OS: Windows XP SP3

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon RussianStyle » Fr 5. Jun 2009, 01:22

nachtrag:

wenn ich mit contain arbeite
Code: Alles auswählen

$selected_groups = $this->Group->Shortmessage->find('all', array (
    'conditions' => array('Shortmessage.id' => $id),
    'contain' => 'Group.id'
    )
);
 

werden die Group arrays zwar nur auf die id reduziert, aber Shortmessage ist immer noch vorhanden...
RussianStyle
 
Beiträge: 7
Registriert: Mi 20. Mai 2009, 13:25
Wohnort: Berlin
CakePHP-Version: 1.2.3.8166 stable
OS: Windows XP SP3

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon euromark » Fr 5. Jun 2009, 08:57

schonmal die rekursion auf -1 gesetzt?
ich arbeite global mit dem Standard -1
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon Mathias » Fr 5. Jun 2009, 11:09

In welchem Controller arbeitest du denn? Solltest du im shortmessages_controller sein, kannst du ja mal diese Abfrage probieren:
Code: Alles auswählen
$selected_groups = $this->Shortmessage->Group->find('all', array (
            'conditions' => array('Shortmessage.id' => $id),
            'fields' => array('Group.id'),
            'recursive' => 0
     )
);

recusrive -1 wird bei meiner Variante nicht funktionieren, da cake erst die Shortmessage und dann die Gruppen raussucht. Sollte recursive auf -1 gesetzt sein, so sucht er nur in der Ebene der Shortmessage, was ja keinen Sinn macht.

Kannst ja mal posten, obs geklappt hat.
cheers
Benutzeravatar
Mathias
 
Beiträge: 225
Registriert: Mi 4. Jun 2008, 22:30
Wohnort: Berlin
CakePHP-Version: 1.3.x
OS: OS X 10.6.x

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon RussianStyle » Fr 5. Jun 2009, 19:08

nee.. klappt leider nicht
arbeiten tu ich im shortmessages_controller

mit dieser abfrage kriege ich folgende query
Code: Alles auswählen

SELECT `Group`.`id` FROM `groups` AS `Group`
LEFT JOIN `users` AS `User` ON (`Group`.`user_id` = `User`.`id`)
LEFT JOIN `usergroups` AS `Usergroup` ON (`Group`.`usergroup_id` = `Usergroup`.`id`)  
WHERE `Shortmessage`.`id` = 2    
 


SQL Error: 1054: Unknown column 'Shortmessage.id' in 'where clause'

irgendwie muss ich cake dazu kriegen, dnoch einen JOIN auszuführen, auf die tabelle groups_shortmessages

@euromark
ich verwende auch recursive -1
RussianStyle
 
Beiträge: 7
Registriert: Mi 20. Mai 2009, 13:25
Wohnort: Berlin
CakePHP-Version: 1.2.3.8166 stable
OS: Windows XP SP3

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon euromark » Fr 5. Jun 2009, 19:37

werden die Group arrays zwar nur auf die id reduziert, aber Shortmessage ist immer noch vorhanden...

soll sie nun oder nicht?

weil in deinem auszug des queries werden die shortmessages gar nich abgefragt
wozu dann Shortmessage.id=2?
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon RussianStyle » Fr 5. Jun 2009, 19:41

weil ich in dem fall die gruppen anzeigen will, die mit der shortmessage 2 verknüpft sind
sorry.. vielleicht hab ich das nicht ganz deutlich dargestellt
RussianStyle
 
Beiträge: 7
Registriert: Mi 20. Mai 2009, 13:25
Wohnort: Berlin
CakePHP-Version: 1.2.3.8166 stable
OS: Windows XP SP3

Re: HABTM... nur einen teil des datensatzes auslesen

Beitragvon euromark » Fr 5. Jun 2009, 19:49

dann brauchst du fürs contain doch die Shortmessage.id ! (nicht die group - die ist ja durchs eigene model angedeckt)
dann sollte es gehen
euromark
 
Beiträge: 618
Registriert: Fr 27. Jun 2008, 22:17
Wohnort: München
CakePHP-Version: 2.1
OS: Windows


Zurück zu Controller

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron