trq Posted June 17, 2009 Share Posted June 17, 2009 Given the following schema. # Defines the user table. User: columns: name: type: string(255) minlength: 4 nospace: true regexp: '/[_a-zA-Z0-9]/' pass: type: string(255) minlength: 6 nospace: true salt: string(32) actAs: Timestampable: Searchable: fields: [name] relations: Email: local: id foreign: user_id Phone: local: id foreign: user_id UserRole: local: id foreign: user_id # Users email address. Email: columns: user_id: integer val: type: string(255) email: true relations: User: local: user_id foreign: id actAs: Timestampable: Searchable: fields: [val] # User phone number. Phone: columns: user_id: integer val: type: string(255) nospace: true # this covers an internal ph extension. minlength: 3 relations: User: local: user_id foreign: id actAs: Timestampable: Searchable: fields: [val] # What role is a user assigned? eg; admin # Directly related to Zend's ACL. UserRole: columns: user_id: integer role_id: integer relations: User: local: user_id foreign: id Role: local: role_id foreign: id actAs: Timestampable: # Define various role types. eg; admin, staff, guest. Role: columns: val: type: string(80) minlength: 4 nospace: true regexp: '/[_a-zA-Z]/' relations: UserRole: local: id foreign: role_id actAs: Timestampable: I'm using the following to retrieve the users name, phone, email and role id. $query = Doctrine_Query::create() ->select('u.name name, e.val email, p.val phone, r.role_id role') ->from('User u') ->leftJoin('u.Email e') ->leftJoin('u.Phone p') ->leftJoin('u.UserRole r') ->where('u.id = ?', 1); $user = $query->fetchOne(); $this->view->name = $user->name; $this->view->email = $user->email; $this->view->phone = $user->phone; $this->view->role = $user->role; How would I alter this query to enable me to retrieve the users role val? I am aware I could execute a simple query, then use the object relations to get to the data I want. eg; $query = Doctrine_Query::create() ->select('u.name') ->from('User u') ->where('u.id = ?', 1); $user = $query->fetchOne(); $this->view->name = $user->name; $this->view->email = $user->Email->val; $this->view->phone = $user->Phone->val; $this->view->role = $user->UserRole->Role->val; However this is apparently very inefficient. Any help would be much appreciated. Link to comment https://forums.phpfreaks.com/topic/162509-doctrine-joining-3-objects/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.