Posted: February 24, 2012 | Author: dpod | Filed under: Applications, Technical Notes, Yii | Tags: compound queries, Computers, database, queries, scaffolding, Tips, YII |
Let’s say you have a database table called persons with separate attributes (fields) for
lastName
and
firstNames
. Elsewhere in your website, you want to refer to the underlying record in this table using the person’s whole name as a single entity (e.g. to provide a link, for example:
<a href="http://example.com/index.php?r=Person/view&id=1">Jane Q. Public</a>
.
Sometimes, you might be able to refer to the two attributes separately. For example, if you simply wanted to echo the content in a view somewhere you could use code like this:
<?php echo CHtml::encode($data->person->firstNames) . ' ' . CHtml::encode($data->person->lastName); ?>
This is a little inefficient if you are doing it a lot throughout your site, because you need to keep re-entering the same code correctly over and over again (and avoiding this is a main reason for going with an
MVC framework like Yii in the first place). But the real trouble comes if you want to use the attributes in a context where the method you are invoking expects a single attribute—as is the case, for example, with the yii linking method
CHtml::link.
The way round this is to create a new compound attribute in your model. This means taking the two underlying attributes in your table and combining them into a single attribute already arranged the way you want that you can then invoke in other methods.
Read the rest of this entry »