1 संस्करण (आसान):
$list = array();
foreach ($Clients as $c) {
$list[$c->id] = $c->first_name . ' ' . $c->last_name;
}
2 संस्करण (यूनिवर्सल):
class ExtHtml extends CHtml {
public static function listData($models,$valueField,$textField,$groupField='')
{
$listData=array();
if($groupField==='')
{
foreach($models as $model)
{
$value=self::value($model,$valueField);
if (is_array($textField)) {
$t = array();
foreach ($textField as $field) {
$t[]=self::value($model,$field,$field);
}
$text=implode(' ', $t);
} else {
$text=self::value($model,$textField, null);
if ($text == null) {
if (is_callable($textField)) $text=call_user_func($textField, $model);
else $text = $textField;
}
}
$listData[$value]=$text;
}
}
else
{
foreach($models as $model)
{
$group=self::value($model,$groupField);
$value=self::value($model,$valueField);
if (is_array($textField)) {
$t = array();
foreach ($textField as $field) {
$t[]=self::value($model,$field,$field);
}
$text=implode(' ', $t);
} else {
$text=self::value($model,$textField, null);
if ($text == null) {
if (is_callable($textField)) $text=call_user_func($textField, $model);
else $text = $textField;
}
}
$listData[$group][$value]=$text;
}
}
return $listData;
}
public static function value($model,$attribute,$defaultValue=null)
{
foreach(explode('.',$attribute) as $name)
{
if(is_object($model) && ($model->hasAttribute($name) || isset($model->{$name})))
$model=$model->$name;
else if(is_array($model) && isset($model[$name]))
$model=$model[$name];
else
return $defaultValue;
}
return $model;
}
}
// in model
function getClients()
{
$Clients = Client::model()->findAll();
$list = ExtHtml::listData($Clients , 'client_id', array('first_name', 'last_name'));
return $list;
}
3 संस्करण (Mysql)
function getClients()
{
$Clients = Client::model()->findAll(array('select' => 'concat(first_name, " ", last_name) as first_name'));
$list = CHtml::listData($Clients , 'client_id', 'first_name');
return $list;
}
@ कन्नन, यह भी अच्छा है :) मुझे लगता है कि अधिक प्रभावशाली रूप से। मैंने 2 साल पहले अपना ExtHtml लिखा था। – Sergey
हाँ यह इतना तेज़ और सरल है, और अब सबसे अच्छा जवाब चुनने के लिए उलझन में है .. :) किसी भी प्रयोग के बाद धन्यवाद @ dInGd0nG – nu6A
कुछ प्रयोगों को एहसास हुआ कि यह विधि मेरे बदले हुए परिदृश्य के लिए उपयुक्त है। और सामान्य रूप से यह उपयुक्त है .. इसलिए मैं इसे स्वीकार कर रहा हूं। – nu6A