我正在研究一个模块,我想在其中执行动态依赖下拉列表和列名功能。
例如,获取所有表名称并将其显示在下拉字段中,选择特定表后,我想在下拉字段中再次显示其所有列名称。
问题是:
1)如何从数据库中获取所有表名?
2)以及如何从表中获取所有列名?
我尝试了很少的文章和论坛,例如 http://www.yiiframework.com/forum/index.php/topic/5920-how-can-i-get-the-actual-full-table-name/但它不起作用。
任何帮助将不胜感激。
谢谢
这很简单,使用 CDbTableSchema
类的实例:
echo 'Name: ', $tbl->name, ' (raw: ', $tbl->rawName, ')';
echo 'Fields: ', implode(', ', $tbl->columnNames);
等等。有很多
方法和属性要获取所有表,只需在此处使用CDbSchema
类文档。
CDbSchema
类同时具有公共tableNames
属性(所有 TBL namnes 的数组)和包含所有元数据的 tables
属性。仅此而已,真的。
若要访问所有这些实例,以下代码就足够了:
$connection = Yii::app()->db;//get connection
$dbSchema = $connection->schema;
//or $connection->getSchema();
$tables = $dbSchema->getTables();//returns array of tbl schema's
foreach($tables as $tbl)
{
echo $tbl->rawName, ':<br/>', implode(', ', $tbl->columnNames), '<br/>';
}
要创建下拉列表,只需使用标准CHtml
对象:
$options = array();
foreach($tables as $tbl)
{//for example
$options[$tbl->rawName] = $tbl->name;
}
$dropDown = CHtml::dropDownList('tables',$tables[0]->rawName, $options);
请花一些时间阅读手册,它都在那里。我没有广泛使用Yii
,好吧,老实说,我根本没有使用它,但我只花了 5 分钟就解决了这个问题。看看来源就知道了!每个方法/类/属性都有一个指向相应文件中确切行的链接!
在要求别人为你弄清楚一些事情之前,先付出一些努力。
从
表中获取所有列名:
TableName::model()->getTableSchema()->getColumnNames();
它将返回一个包含 TableName 的所有列名的数组。
要同时获得表和列,请参阅此答案,我将示例代码粘贴到下面,请访问该答案以获取更多解释。
$connection = Yii::app()->db;//get connection
$dbSchema = $connection->schema;
//or $connection->getSchema();
$tables = $dbSchema->getTables();//returns array of tbl schema's
foreach($tables as $tbl)
{
echo $tbl->rawName, ':<br/>', implode(', ', $tbl->columnNames), '<br/>';
}
获取所有列名和标签:
$fields=Tablename::attributeLabels();
foreach($fields as $key=>$value){
echo "column name : ".$key." and label ".$value."<br/>";
}
它将显示来自模态的所有字段名称和标签值.....