2016-03-29 3 views
1

I gii Code-Generator verwenden, und ich möchte inWie kann ich Primary Key bekommen in Yü 2 crud Generator Vorlage

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

Yü Primärschlüssel erhalten diesen Code verwenden

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

Und ich will Holen Sie primaryKey vor dem Untercode.

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

aber funktioniert nicht.

Antwort

0

finde ich eine Funktion aus

C: \ wamp \ www \ yii2 \ Anbieter \ yiisoft \ yii2-GII \ Generatoren \ CRUD \ Generator.php

Funktion ist 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]; 
} 

und ich rufe folgenden Code erfolgreich in Datei:

C: \ wamp \ www \ yii2 \ Anbieter \ yiisoft \ yii2-GII \ Generatoren \ Modell/default/views/index.php

wie

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

oder kurz

<?= $nameAttribute; ?> 
2

Diese Funktion gibt nicht zurück, was Sie wollen. Es wird das Namensattribut zurückgeben, das der Primärschlüssel sein kann oder nicht. Wenn Sie eine Spalte namens "name" in Ihrer Datenbank hinzufügen, wird der Name dieser Spalte zurückgegeben und NICHT der Primärschlüssel.

Außerdem ist der Zweck dieser Funktion, den Namen von 1 Spalte zurückzugeben. Diese 1 Spalte ist möglicherweise nicht der vollständige Primärschlüssel, sie kann Teil davon sein. Wenn Sie einen Primärschlüssel haben, der wiederum aus mehreren Spalten besteht, wird diese Funktion Ihnen fehlschlagen.

Der richtige Weg, um es

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

und $ ist ein Array.

Ihre Antwort kann Ihr Problem lösen (und ich habe ähnliche Dinge in meinem Code verwendet), aber es beantwortet nicht wirklich Ihre Frage (wie Sie den Primärschlüssel erhalten).

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

ist keine Methode, ist eine Eigenschaft wäre dann:

$generator->getTableSchema()->primaryKey; 

dies ein Array zurück, für den Spaltennamen erhalten Sie auf das erste Element des Arrays zugreifen muss, wie

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

Für andere Seite, können Sie machen:

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