Yii Framework Forum: Can't Get Related Table's Data - Yii Framework Forum

Jump to content

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

Can't Get Related Table's Data Using findAll() and with() Rate Topic: -----

#1 User is offline   Sebastian 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 15-June 11

Posted 16 January 2013 - 06:17 PM

Hi there,

I've worked through tons of tutorials, but I cannot access data of a related table.
I've got three tables: User, Place, Event

They are related like this:
User
			'places' => array(self::HAS_MANY, 'Place', 'created_by'),
			'events' => array(self::HAS_MANY, 'Event', 'user'),


Place
			'parent' => array(self::BELONGS_TO, 'Place', 'parent'),
			'places' => array(self::HAS_MANY, 'Place', 'parent'),
			'createdBy' => array(self::BELONGS_TO, 'User', 'created_by'),
			'events' => array(self::HAS_MANY, 'Event', 'event'),

Event
			'place' => array(self::BELONGS_TO, 'Place', 'place'),
			'user' => array(self::BELONGS_TO, 'User', 'user'),


I just want to do the following: I want to get the latest 10 Posts, including the Name of the User and the Name of the event. I do not want to use lazy loading.

So I tried these:
$latest_events = Event::model()->with('place', 'user')->findAll(array('order'=>'event.id DESC', 'limit'=>'10'));

$latest_events = Event::model()->findAll(array('with'=>array('place', 'user')));

$latest_events = Event::model()->findAllByAttributes(
			array(), // $attributes
			array('with'=>array('place', 'user'))
		);


Whichever code I try, I cannot do like this in the view:
foreach ($latest_events as $event) { $event->place->name }

This will return null.

I know, the latter two codes neglect that I want the 10 latest posts - wanted to keep it simple for searching the error.

This is, what I would like to have (in SQL), but available through the model's structure:
SELECT `t`.id, `t`.text, `place`.`name`,  `user`.`name`
		FROM  `event` `t` 
		LEFT OUTER JOIN  `place`  `place` ON (  `t`.`place` =  `place`.`id` ) 
		LEFT OUTER JOIN  `user`  `user` ON (  `t`.`user` =  `user`.`id` ) 
		ORDER BY t.id DESC 
		LIMIT 10


Can you please enlighten me?
0

#2 User is offline   Sebastian 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 15-June 11

Posted 17 January 2013 - 04:42 AM

For everyone who may get this problem in the future, here is the solution.

Event has a column "place" with an id. Place has the corresponding "name". However, the relation also had the name "place". See here:
'place' => array(self::BELONGS_TO, 'Place', 'place'),

Thus, when calling $event->place, I did get the id, which is in Event.place. But using $event->place->name, Yii seems to not know how it should resolve the relation.

The solution was to rename the relation to "fkplace":
'fkplace' => array(self::BELONGS_TO, 'Place', 'place'),


Then to use in the controller:
$latest_events = Event::model()->findAll(array('with'=>array('fkplace', 'user')));


And in view:
$event->fkplace->name


Works!

Edit: of course, this shortened solution misses fkuser and limit 10 and such, but I think that is no problem anymore now :).
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