如何从Yii Framework中的数据库中获取所有表名和列名

J.K*_*.A. 4 php yii

我正在开发一个模块,我想做动态相关的下拉列表和列名称功能.

防爆.获取所有表名并在下拉字段中显示它,在选择特定表后,我想在下拉字段中再次显示其所有列名.

问题是:

1)如何从db获取所有表名?

2)以及如何从表中获取所有列名?

我尝试了很少的文章和论坛,如http://www.yiiframework.com/forum/index.php/topic/5920-how-can-i-get-the-actual-full-table-name/, 但它不起作用.

任何帮助,将不胜感激.

谢谢

Eli*_*gem 16

使用CDbTableSchema类的实例非常简单:

echo 'Name: ', $tbl->name, ' (raw: ', $tbl->rawName, ')';
echo 'Fields: ', implode(', ', $tbl->columnNames);
Run Code Online (Sandbox Code Playgroud)

等等.这里有很多方法和属性
要获取所有表,只需在此处使用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/>';
}
Run Code Online (Sandbox Code Playgroud)

要创建下拉列表,只需使用标准CHtml对象:

$options = array();
foreach($tables as $tbl)
{//for example
    $options[$tbl->rawName] = $tbl->name;
}
$dropDown = CHtml::dropDownList('tables',$tables[0]->rawName, $options);
Run Code Online (Sandbox Code Playgroud)

请花一些时间阅读手册,它就在那里.我没有Yii那么广泛地使用它,好吧,我没有使用它,说实话,但它只花了我5分钟来解决这个问题.只看源头!每个方法/类/属性都有一个指向相应文件中确切行的链接!
在要求别人为你解决问题之前,先付出一些努力.

  • @Sky:通过阅读血腥手册,就像我一样......我只花了5分钟,但我已将我的发现添加到我的答案中 (3认同)