Intereting Posts
Загрузка Multifile не работает не может выйти из phpmyadmin в XAMPP Почему я получаю «неопределенную переменную» в представлении Laravel? Пустота как возвращаемый тип Создание образа без сохранения его как локального файла Ограничение позиций корзины в одной и той же категории продуктов Удалить неанглийские символы PHP Шифрование RSA. Создайте шифрованный текст в PHP и расшифруйте его в Javascript Ошибка воспроизведения демонстрации «Вы не можете определить элемент последовательности, когда в картировании» WordPress Загрузка дополнительных сообщений onclick с ajax request jquery Получение данных во время цикла с использованием левого соединения MySQL: два внешних ключа в одной таблице, относящихся к другой таблице Должен ли я использовать текстовый файл или базу данных для счетчика посетителей PHP? Загрузите много файлов на клиентской стороне и сжимайте их, затем загрузите файл сжатия на сервер PHP возвращаемый тип намека, объект ИЛИ логический?

В структуре Yii, как я могу объединить столбцы и показать в качестве отображаемой строки в выпадающем списке

У меня есть dropDownList на мой взгляд, он dropDownList из таблицы clients , в таблице содержатся такие столбцы, как first_name , last_name , id и т. Д. Теперь я хочу показать first_name и last_name как отображаемый текст и id как значение в выпадающем списке, I 'm делается с id как value и first_name как отображаемый текст, но здесь я хочу объединить эти столбцы ( first_name и last_name ) и использовать их в качестве отображаемого текста.

в модели

 function getClients() { $Clients = Client::model()->findAll(); $list = CHtml::listData($Clients , 'client_id', 'first_name'); return $list; } 

ввиду

 echo $form->dropDownList($model,'client_id',$model->getClients()); 

Heres другой метод В модели

 function getFullName() { return $this->first_name.' '.$this->last_name; } 

а также

 function getClients() { $Clients = Client::model()->findAll(); $list = CHtml::listData($Clients , 'client_id', 'fullName'); return $list; } 

Я думаю, что это метод многократного использования, поскольку вы можете использовать полный атрибут fullName не только в раскрывающемся списке, но и везде, где требуется полное имя.

1-й вариант (легкий):

 $list = array(); foreach ($Clients as $c) { $list[$c->id] = $c->first_name . ' ' . $c->last_name; } 

Второй вариант (универсальный):

 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; } 

Попробуйте этот компактный режим с использованием функции «анонимной функции» PHP:

  function getClients() { return CHtml::listData(Client::model()->findAll(), 'id', function($client) { return $client->first_name . ' ' . $client->last_name; }); } 

Предыдущий комментарий с «компактным режимом» с анонимной функцией имеет ошибку! Правильный код:

  function getClients() { $clients = Client::model()->findAll(); return CHtml::listData($clients, 'id', function($clients) { return $client->first_name . ' ' . $client->last_name; }); }