Yii2 如何在Yii 2积垢生成器模板中获取主键

Yii2 如何在Yii 2积垢生成器模板中获取主键,yii2,Yii2,我使用gii代码生成器,我想输入主键 C:\wamp\www\yii2\vendor\yiisoft\yii2-gii\generators\model/default/views/index.php 我使用这个代码 $count = 0; if (($tableSchema = $generator->getTableSchema()) === false) { foreach ($generator->getColumnNames() as $name) {

我使用gii代码生成器,我想输入主键

C:\wamp\www\yii2\vendor\yiisoft\yii2-gii\generators\model/default/views/index.php
我使用这个代码

$count = 0;
if (($tableSchema = $generator->getTableSchema()) === false) {
    foreach ($generator->getColumnNames() as $name) {
        if (++$count < 6) {
            echo "            '" . $name . "',\n";
        } else {
            echo "            // '" . $name . "',\n";
        }
    }
} else {
    foreach ($tableSchema->columns as $column) {
        $format = $generator->generateColumnFormat($column);
        if (++$count < 6) {
            echo "            '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n";
        } else {
            echo "            // '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n";
        }
    }
}
$count=0;
if($tableSchema=$generator->getTableSchema())==false){
foreach($generator->getColumnNames()作为$name){
如果(++$count<6){
回显“'”$name.“,\n”;
}否则{
echo“/”“$name.”,\n“;
}
}
}否则{
foreach($tableSchema->columns as$column){
$format=$generator->generateColumnFormat($column);
如果(++$count<6){
回显“'”$column->name.($format==='text'?”“:“:”:“$format)。“,\n”;
}否则{
echo“/”$column->name.($format==='text'?“”:“:”:“$format)。“,\n”;
}
}
}
我想在下载代码之前先得到primaryKey

$generator->getTableSchema()->primaryKey()


但不起作用。

我从中找到一个函数

C:\wamp\www\yii2\vendor\yiisoft\yii2 gii\generators\crud\Generator.php

函数为getNameAttribute()

我在文件中成功调用了以下代码:

C:\wamp\www\yii2\vendor\yiisoft\yii2 gii\generators\model/default/views/index.php

比如

<?= $generator->getNameAttribute(); ?>//id
//id
或者很快

<?= $nameAttribute; ?>

该函数不会返回您想要的内容。它将返回name属性,该属性可能是主键,也可能不是主键。如果在数据库中添加一个名为“name”的列,则将返回该列的名称,而不是主键

此外,该函数的目的是返回1列的名称。这1列可能不是完整的主键,它可能是主键的一部分,如果您的主键又由多个列组成,那么该函数将使您失败

正确的方法是

$class = $this->modelClass;
$pk = $class::primaryKey();
$pk是一个数组

您的答案可能会解决您的问题(我在代码中也使用了类似的东西),但它并不能真正回答您的问题(如何获取主键)

不是一个方法,而是一个属性,然后将是:

$generator->getTableSchema()->primaryKey;
这将返回一个数组,要获取列名,必须访问数组的第一个元素,如

$generator->getTableSchema()->primaryKey[0];
另一方面,您可以:

  foreach ($generator->getTableSchema()->columns as $column) {
    if ($column->isPrimaryKey) {
      // your code
    }
$generator->getTableSchema()->primaryKey[0];
  foreach ($generator->getTableSchema()->columns as $column) {
    if ($column->isPrimaryKey) {
      // your code
    }