Empfehlungen: Erweiterte Suche

Benutzernamen über die Link Tabelle holen...

Ausgabedaten formatieren und darstellen

Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » So 12. Jul 2009, 19:32

Nabend,

ich möchte gerne Daten aus einer Tabelle über eine Link Tabelle holen, um genauer zu sein will ich den Benutzernamen haben...

habe 3 tabellen:

Code: Alles auswählen
questions { id, dude_id, question }

dudes { id, user_id }

users { id, username, password }


zurzeit liefert mir der questions controller (index) folgende daten aber:

Code: Alles auswählen
Array
(
    [0] => Array
        (
            [Question] => Array
                (
                    [id] => 6
                    [dude_id] => 1
                    [question] => what ever...

                )

            [Dude] => Array
                (
                    [id] => 2
                    [user_id] => 2
                )

        )
)


question MVC wurde mit cake bake all Question generiert!

Meine Frage jetzt, wie schaffe ich es die Daten zu verknüpfen, so das es am ende so aussieht:

Code: Alles auswählen
Array
(
    [0] => Array
        (
            [Question] => Array
                (
                    [id] => 6
                    [dude_id] => 1
                    [question] => what ever...

                )

            [Dude] => Array
                (
                    [id] => 2
                    [user_id] => 2
                    [username] => Bobbo <= das  aus der Users Tabelle auch anhand der user_id der benutzernamen hier reingepackt wird!
                )

        )
)


[username] => Bobbo <= das aus der Users Tabelle auch anhand der user_id der benutzernamen hier reingepackt wird!

Gruß, Alex
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon Jörg » Mo 13. Jul 2009, 17:33

Hallo Alex,
du musst in deinem Model (Question) die Users-Table als $hasOne-Beziehung hinzufügen.
Anhand der user_id aus der Table `dudes` holt sich CakePHP dann die USER-Daten.

Du wirst jedoch wenn ein Array wie folgt erhalten:
Code: Alles auswählen
Array
(
    [0] => Array
        (
            [Question] => Array
                (
                    [id] => 6
                    [dude_id] => 1
                    [question] => what ever...

                )

            [Dude] => Array
                (
                    [id] => 2
                    [user_id] => 2                  
                )
            [User] => Array
                (
                    [id] => 2
                    [username] => Bobbo
                )

        )
)


Gruß
Jörg
Jörg
 
Beiträge: 132
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 19:08

Hi Jörg, danke für die Antwort ;)

Aber ich denke ich habe zuwenig Details preisgegeben...

questions { id, dude_id, question }

dudes { id, user_id }

users { id, username, password }

es kommt noch dazu die tabelle enemies { id, user_id } und aus der questions wird jetzt { id, dude_id, enemy_id, question }

jetzt sieht es alles so aus:

Code: Alles auswählen
questions { id, dude_id, enemy_id, question }

enemies { id, user_id }

dudes { id, user_id }

users { id, username, password }


und die ausgabe dann:

Code: Alles auswählen
Array
(
    [0] => Array
        (
            [Question] => Array
                (
                    [id] => 6
                    [dude_id] => 1
                    [enemy_id] => 1
                    [question] => what ever...

                )

            [Dude] => Array
                (
                    [id] => 1
                    [user_id] => 2
                )

            [Enemy] => Array
                (
                    [id] => 1
                    [user_id] => 3
                )

        )
)


tja, etwas verzwickter, deswegen wollte ich ja umbedingt den usernamen in das jeweilige Dude oder Enemy array reinpacken! den woher soll cakephp wissen in so einem fall was, was ist... bin verwirrt...

folgender Code hat nix erreicht bei dem Model(Question):

Code: Alles auswählen
    var $hasOne = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );


nur das CakePHP einen leeren Datensatz liefert...

Code: Alles auswählen
            [User] => Array
                (
                    [id] =>
                    [username] =>
                    [password] =>
                )


so gesehen müsste es 2 mal User geben einmal den von dude und einmal den von enemy...

Gruß, Alex (verwirrt)
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon Jörg » Mo 13. Jul 2009, 20:32

Hallo Alex,
setzte mal deine Conditions indem du die Dude.user_id = User.id setzt.

Gruß
Jörg
Jörg
 
Beiträge: 132
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 20:37

total am verzweifeln...

also wollte es alles klein kompakt machen, damit man mir besser helfen kann, aber so sieht der echte code aus!

Code: Alles auswählen
Array
(
    [0] => Array
        (
            [Request] => Array
                (
                    [id] => 6
                    [client_id] => 1
                    [status_id] => 1
                    [priority_id] => 4
                    [employee_id] => 2
                    [request_type_id] => 2
                    [subject] => Drucker brennt...
                    [created] => 2009-07-11 15:09:40
                    [modified] => 2009-07-11 21:18:50
                )

            [Client] => Array
                (
                    [id] => 1
                    [user_id] => 3
                )

            [Status] => Array
                (
                    [id] => 1
                    [name] => offen
                )

            [Priority] => Array
                (
                    [id] => 4
                    [name] => Dringend
                )

            [Employee] => Array
                (
                    [id] => 2
                    [user_id] => 2
                )

            [RequestType] => Array
                (
                    [id] => 2
                    [name] => Störung
                )

            [User] => Array
                (
                    [id] =>
                    [username] =>
                    [password] =>
                )

        )


und hier das Model:

Code: Alles auswählen
<?php
class Request extends AppModel {

    var $name = 'Request';
    var $validate = array(
        'client_id' => array('numeric'),
        'status_id' => array('numeric'),
        'priority_id' => array('numeric'),
        'employee_id' => array('numeric'),
        'request_type_id' => array('numeric')
    );

    //The Associations below have been created with all possible keys, those that are not needed can be removed
    var $belongsTo = array(
        'Client' => array(
            'className' => 'Client',
            'foreignKey' => 'client_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Status' => array(
            'className' => 'Status',
            'foreignKey' => 'status_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Priority' => array(
            'className' => 'Priority',
            'foreignKey' => 'priority_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Employee' => array(
            'className' => 'Employee',
            'foreignKey' => 'employee_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),     
        'RequestType' => array(
            'className' => 'RequestType',
            'foreignKey' => 'request_type_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        )
    );

    var $hasMany = array(
        'Message' => array(
            'className' => 'Message',
            'foreignKey' => 'request_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
   
    var $hasOne = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'id',
            'dependent' => false,
            'conditions' => array('Client.user_id' => 'User.id'),
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    ); 

}
?>
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 20:48

Code: Alles auswählen
    var $hasOne = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'id',
            'dependent' => false,
            'conditions' => array('User.id' => '1'),
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    ); 


wenn ich die ID direkt eingebe geht es, wenn ich stattdesen Client.user_id reinschreibe geht es nicht :/
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 21:06

hier ist meine datenbank
Bild
Zuletzt geändert von aioon am Mo 13. Jul 2009, 21:11, insgesamt 1-mal geändert.
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon Jörg » Mo 13. Jul 2009, 21:07

Moin,
poste uns bitte mal deinen SQL-Query aus der CAKE-DEBUG Ausgabe...
Anhand dessen kann man sicherlich mehr ableiten.

Gruß
Jörg
Jörg
 
Beiträge: 132
Registriert: Di 13. Mai 2008, 13:45
Wohnort: Bremen
CakePHP-Version: 2.0.3, 1.3.x
OS: Win7/Ubuntu

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 21:14

der sql code!

Code: Alles auswählen
SELECT COUNT(*) AS `count` FROM `requests` AS `Request` LEFT JOIN `clients` AS `Client` ON (`Request`.`client_id` = `Client`.`id`) LEFT JOIN `statuses` AS `Status` ON (`Request`.`status_id` = `Status`.`id`) LEFT JOIN `priorities` AS `Priority` ON (`Request`.`priority_id` = `Priority`.`id`) LEFT JOIN `employees` AS `Employee` ON (`Request`.`employee_id` = `Employee`.`id`) LEFT JOIN `request_types` AS `RequestType` ON (`Request`.`request_type_id` = `RequestType`.`id`) LEFT JOIN `users` AS `User` ON (`User`.`id` = 1) WHERE 1 = 1         1   1   1


Code: Alles auswählen
SELECT `Request`.`id`, `Request`.`client_id`, `Request`.`status_id`, `Request`.`priority_id`, `Request`.`employee_id`, `Request`.`request_type_id`, `Request`.`subject`, `Request`.`created`, `Request`.`modified`, `Client`.`id`, `Client`.`user_id`, `Status`.`id`, `Status`.`name`, `Priority`.`id`, `Priority`.`name`, `Employee`.`id`, `Employee`.`user_id`, `RequestType`.`id`, `RequestType`.`name`, `User`.`id`, `User`.`username`, `User`.`password` FROM `requests` AS `Request` LEFT JOIN `clients` AS `Client` ON (`Request`.`client_id` = `Client`.`id`) LEFT JOIN `statuses` AS `Status` ON (`Request`.`status_id` = `Status`.`id`) LEFT JOIN `priorities` AS `Priority` ON (`Request`.`priority_id` = `Priority`.`id`) LEFT JOIN `employees` AS `Employee` ON (`Request`.`employee_id` = `Employee`.`id`) LEFT JOIN `request_types` AS `RequestType` ON (`Request`.`request_type_id` = `RequestType`.`id`) LEFT JOIN `users` AS `User` ON (`User`.`id` = 1) WHERE 1 = 1 LIMIT 20
Zuletzt geändert von aioon am Di 14. Jul 2009, 16:45, insgesamt 1-mal geändert.
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Re: Benutzernamen über die Link Tabelle holen...

Beitragvon aioon » Mo 13. Jul 2009, 21:31

klasse hab es geschafft :D

Code: Alles auswählen
    var $hasOne = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => '',
            'dependent' => false,
            'conditions' => array('User.id = Client.user_id'),
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    ); 


ich habe warum auch immer den foreignKey drin gehabt, der hat mir Probleme bereitet, indem auch die Request.id hinzugezogen wurde!

@Jörg vielen Dank für deine Hilfe! die idee mit den SQL Befehlen, war toll, habe so den fehler finden können :)

Vielen Dank!

nun stehe ich vor einem weiterem problem...
aioon
 
Beiträge: 39
Registriert: So 12. Jul 2009, 18:14

Nächste

Zurück zu Views

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast