Yii Framework Forum: ActiveRecord mit MANY_MANY - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

ActiveRecord mit MANY_MANY Rate Topic: -----

#1 User is offline   forseti 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 16-January 09

Posted 24 July 2009 - 07:39 AM

Nehmen wir mal an, ich habe 3 Tabellen:
User
id
username

UserAddress
userId
addressId
name

Address
id
zip

die entsprechenden Relationen
'addresses' => array(self::MANY_MANY, 'Address', 'UserAddress(userId, addressId)')
'users' => array(self::MANY_MANY, 'User', 'UserAddress(userId, addressId)')
funktionieren einwandfrei, z.B. $user->address->zip
Nur wie kann ich jetzt den namen der Relation verwenden, also 'name' aus 'UserAddress' ?
0

#2 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 24 July 2009 - 07:56 AM

Dazu brauchst du eine weitere Relation:

'useraddress' => array(self::HAS_MANY, 'UserAddress','userId'),
 
 // Dann:
 $name=$user->useraddress->name

0

#3 User is offline   forseti 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 16-January 09

Posted 24 July 2009 - 08:18 AM

Da gebe ich dir Recht, aber so bekomme ich doch nur 'irgendeinen' namen, ich hätte aber gerne den zu einer bestimmten Relation gehörenden Namen.
Beispiel:
User: id: 1 username: mustermann
User: id: 2 username: irgendwas
UserAddress: userId: 1 addressId: 3 name: 'bei Mutti'
UserAddress: userId: 2 addressId: 3 name: 'bei Pappi'
Address: id: 3 zip: 12345
beide Personen wohnen also in der gleichen Adresse, nennen sie aber unterschiedlich.

ich hätte dann gerne etwas in der Art:
foreach($model->adresses as $address)
echo CHtml::encode($address->name); // wie auch immer
echo CHtml::encode($address->zip);
endforeach;


spontan würde mir dazu nur ein 'findByPk()' in UserAddress mit den beiden IDs einfallen, wass ich aber unschön finde.
0

#4 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 24 July 2009 - 09:25 AM

Hmm. Da hast du recht. Glaube, dazu gibt es noch keine generelle Lösung. Ein Workaround (zwar nicht unbedingt wunderschön, aber immerhin...) könnte so aussehen:

'useraddress' => array(self::HAS_MANY, 'UserAddress','userId', array('index'=>'addressId')),


Damit werden die UserAddress-Records mit der adressId indiziert (statt 0-basiert). Das geht aber erst seit Version 1.0.7. Du könntest die Adressnamen dann so ansprechen:

// $model ist vermutlich vom Typ 'User' ...
foreach($model->adresses as $address)
echo CHtml::encode($model->useraddress[$adress->id]->name);
echo CHtml::encode($address->zip);
endforeach;


1

#5 User is offline   forseti 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 5
  • Joined: 16-January 09

Posted 24 July 2009 - 03:07 PM

Sehr interessante Sache. So habe ich das auch nicht gewusst.

Vielen Dank, das werde ich mal in Angriff nehmen :)
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users