thyseus
(Thyseus)
1
Hi, please see this Code:
<?php
$posts = Post::model()->findAll();
foreach($posts as $post) echo $post->author;
?>
works fine, but :
<?php
$post = new Post();
$posts = $post->findAll();
foreach($posts as $post) echo $post->author;
?>
says post.author is not defined.
Unfortunately even this won’t work:
<?php
$post = new Post();
$posts = $post->with('author')->findAll();
foreach($posts as $post) echo $post->author;
?>
I need to have this function because a $dynamic_var::model()->findAll() only works in PHP >5.3 (AFAIK!),
and the $obj = new $dynamic_var; $objects = $dynamic_var->findAll() isn’t able to handle relations.
Or am I doing something wrong/is there another way to accomplish this?
Thanks in advance
thyseus
(Thyseus)
2
I did some investigation…
Scenario: grandparent 1:n to parent 1:n to child
<?php
$var_i_want_to_fetch = "parent.grandparent";
$childobj = new Child();
$childobjs = $childobj->findAll();
echo $childobjs[0]->$var_i_want_to_fetch;
?>
This doesn’t work because he translates this into
child->parent.grandparent
but he could be more intelligent and translate this into
child->parent->grandparent
maybe we can make the magic _get() function of ActiveRecord a little bit more intelligent and allow for parent.grandparent syntax?
thyseus
(Thyseus)
3
My Investigations went further…
i would suggest something like this:
CActiveRecord.php:
/**
* PHP getter magic method.
* This method is overridden so that AR attributes can be accessed like properties.
* @param string property name
* @return mixed property value
* @see getAttribute
*/
public function __get($name)
{
if(isset($this->_attributes[$name]))
return $this->_attributes[$name];
else if(isset($this->getMetaData()->columns[$name]))
return null;
else if(isset($this->_related[$name]))
return $this->_related[$name];
else if(isset($this->getMetaData()->relations[$name]))
return $this->getRelated($name);
else if(strstr($name, '.') != FALSE) {
$data = explode('.', $name);
return($this->getRelated($data[0])->$data[1]);
}
else
return parent::__get($name);
}
qiang: what do you think about this small but useful addition?
andy_s
(Arekandrei)
4
$objects = CActiveRecord::model($dynamic_var)->findAll();