defining relations with eager loading model()->with()

Hi there, (my first post)

I have a problem accessing data from related table with ActiveRecords using the with() statement when there are two tables in between.

Here is my little db model: (Can’t post image 'cos i’m a newby)

[sql]


– Table mydb.location


CREATE TABLE IF NOT EXISTS mydb.location (

idlocation INT NOT NULL ,

address VARCHAR(45) NULL ,

PRIMARY KEY (idlocation) )

ENGINE = InnoDB;


– Table mydb.phonenumber


CREATE TABLE IF NOT EXISTS mydb.phonenumber (

idphonenumbers INT NOT NULL ,

locationid INT NULL ,

number VARCHAR(45) NULL ,

PRIMARY KEY (idphonenumbers) ,

INDEX locationid (locationid ASC) ,

INDEX fk_locationid (locationid ASC) ,

CONSTRAINT fk_locationid

FOREIGN KEY (`locationid` )


REFERENCES `mydb`.`location` (`idlocation` )

ENGINE = InnoDB;


– Table mydb.mental


CREATE TABLE IF NOT EXISTS mydb.mental (

idmental INT NOT NULL ,

item VARCHAR(45) NULL ,

price FLOAT NULL ,

PRIMARY KEY (idmental) )

ENGINE = InnoDB;


– Table mydb.mental_location


CREATE TABLE IF NOT EXISTS mydb.mental_location (

idmental INT NOT NULL ,

idlocation INT NOT NULL ,

PRIMARY KEY (idmental, idlocation) ,

INDEX fk_location (idlocation ASC) ,

INDEX fk_mental (idmental ASC) ,

CONSTRAINT fk_location

FOREIGN KEY (`idlocation` )


REFERENCES `mydb`.`location` (`idlocation` )

CONSTRAINT fk_mental

FOREIGN KEY (`idmental` )


REFERENCES `mydb`.`mental` (`idmental` )

ENGINE = InnoDB;

[/sql]

Scenario

Trying to get data from table phonenumber from Controller Mental.

Model mental()




public function relations(){

  return array(

  'locations' => array(self::MANY_MANY, 'Location', 'mental_location(idmental, idlocation)'),

  // howto define the relations for phone number ? tried:

  'locations.phonenumbers'	=> array(self::HAS_MANY, 'Phonenumber', 

          array('idlocation'=>'locationid'), 'through'=>'locations'), 


);

}



Controller Rental




public function actionUpdate(){

  $model = Rental::model()->with('locations', 'locations.phonennumbers')->findByPk($id);

  // how to access phone number? tried

  // how to access the model after the dot? like phonenumbers?

  $mod_phonenumbers = $model->locations->phonenumbers; // but didn't work

}



Spent two days on this already. Hints welcome.

Fu

Yii1.1/MAMP

Hi fulanku

you should describe relation with phonenumbers in Location model.

Access will be like this $model->locations[0]->phonenumbers

Much better now! Thx.