2016-03-29 37 views
1

我用GII代碼生成主鍵,我想主鍵我怎樣才能在Yii中2 CRUD生成模板

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

Yii中使用此代碼

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

而且我想在下面的代碼之前獲取primaryKey。

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

但無法正常工作。

回答

0

我找到從函數

C:\瓦帕\ WWW \ yii2 \廠商\ yiisoft \ yii2-GII \發電機\污物\ Generator.php

功能是getNameAttribute()

public function getNameAttribute() 
{ 
    foreach ($this->getColumnNames() as $name) { 
     if (!strcasecmp($name, 'name') || !strcasecmp($name, 'title')) { 
      return $name; 
     } 
    } 
    /* @var $class \yii\db\ActiveRecord */ 
    $class = $this->modelClass; 
    $pk = $class::primaryKey(); 

    return $pk[0]; 
} 

我呼籲在文件成功以下代碼:

C:\瓦帕\ WWW \ yii2 \廠商\ yiisoft \ yii2-GII \發電機\模型/默認/視圖/ index.php的

<?= $generator->getNameAttribute(); ?>//id 

OR不久

<?= $nameAttribute; ?> 
2

該函數不會返回你想要的。它將返回可能是主鍵的名稱屬性,或者它可能不是。如果在數據庫中添加名爲「name」的列,則該列的名稱將返回而不是主鍵。

此外,該功能的目的是返回1列的名稱。這1列可能不是完整的主鍵,它可能是它的一部分,如果你有一個由多個列組成的主鍵,那麼這個功能會讓你失敗。

正確的方式得到它是

$class = $this->modelClass; 
$pk = $class::primaryKey(); 

和$ pk的是一個數組。

你的回答可能會解決你的問題(我自己在我的代碼中使用了類似的東西),但它並沒有真正回答你的問題(如何獲得主鍵)。

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

不是方法,那麼一個屬性是:

$generator->getTableSchema()->primaryKey; 

這個返回數組,爲讓你必須訪問數組的第一個元素的列名,像

$generator->getTableSchema()->primaryKey[0]; 

對於另一方面,你可以做:

foreach ($generator->getTableSchema()->columns as $column) { 
    if ($column->isPrimaryKey) { 
     // your code 
    }