php - seleccionar - Ordena dropDownList usando relaciones?
select ajax php mysql (2)
Creo que la forma correcta de hacerlo es mediante el uso de ámbitos .
Puede definir cualquier cantidad de ámbitos que ordenen el conjunto de resultados y usarlos de la siguiente manera:
Company::model()->scopeName()->findAll();
Si su aplicación siempre requiere que las empresas se busquen en un orden ordenado, incluso puede definir un alcance predeterminado en su clase de modelo:
public function defaultScope() {
return array(''order'' => ''company ASC'');
}
Esto dará lugar a cada llamada a Company::model()->findAll();
devolver resultados ordenados
Tengo algunos formularios en Yii usando lo siguiente para obtener listas de datos de tablas relacionadas en forma de menú desplegable:
dropDownList(CHtml::listData(Company::model()->findAll(array(''order'' => ''company ASC''))));
Esto funciona, pero eso significa que para cada lista desplegable (que es mucho) voy a poner esta array(''order'' => ''company ASC''
en cada uno.
¿Es esta la mejor manera de hacerlo? ¿No hay una forma de obtener estos datos usando las relaciones modelo () y especificando el orden dentro de la relación?
Normalmente agrego un método opts()
a cada modelo que podría usarse como fuente para un menú desplegable:
class Company extends CActiveRecord
{
// ...
public static opts()
{
$opts = array();
foreach(self::model()->findAll(array(''order''=>''name ASC'')) as $model)
$opts[$model->id] = $model->name;
return $opts;
}
Se usa así
echo $form->dropDownList($user, ''company_id'', Company::opts());
Si necesita las mismas opciones varias veces en una página, incluso podría "almacenar en caché" el resultado en una variable de clase privada estática o usar DAO para obtener los datos de la lista de una manera más eficiente.