2015-08-07 20 views
7

https://github.com/Xethron/migrations-generatorLaravel 5.1: Migration Datenbank vorhandene

ich meine Datenbankstruktur in Laravel oben php artisan migrate:generate Befehl mit Hilfe der Erweiterung mit migriert. Aber es gibt ein kleines Problem, meine Primärschlüssel sind nicht als ID benannt, ich habe stattdessen eine andere Konvention verwendet, indem ich ihnen ein Präfix wie user_id, product_id, photo_id usw. hinzugefügt habe. Alle diese werden natürlich automatisch inkrementiert.

Hier ist meine aktuelle create_users_table.php Datei in meinem Migrationsordner. Ich habe user_id definiert, um die Standard-ID-Option zu überschreiben, ist das die richtige Verwendung?

<?php 

use Illuminate\Database\Migrations\Migration; 
use Illuminate\Database\Schema\Blueprint; 

class CreateUsersTable extends Migration 
{ 

/** 
* Run the migrations. 
* 
* @return void 
*/ 
    public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
      $table->primary('user_id'); 
      $table->integer('user_id', true); 
      $table->string('name', 500); 
      $table->string('email', 500); 
      $table->string('password', 500); 
     } 
    ); 
} 


/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('users'); 
} 
} 

ich gelesen, dass ich so etwas wie unten hinzufügen müssen, aber ich bin nicht sicher, wo protected $primaryKey zu definieren, da meine Klasse Migration statt Eloquent erstreckt.

class CreateUsersTable extends Eloquent { 

    protected $primaryKey = 'user_id'; 

} 

ich die folgende Fehlermeldung erhalten, wenn ich/Auth/Login-Seite gehen, die ich Ursachen denken wegen der user_id Nutzung statt id. Wie kann ich es reparieren?

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.id' in 'where clause' (SQL: select * from `users` where `users`.`id` = 5 limit 1) 

Antwort

3

Sie benötigen eine Nicht-Standard-Primärschlüssel in Ihrem User Modell angeben:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model { 

    protected $primaryKey = 'user_id'; 

Sie müssen dies für alle Modelle tun, die nicht id als ihre Primärschlüssel verwenden Sie.

+1

Aaaund es hat funktioniert. Vielen Dank. – salep

+1

Kein Problem. Sie werden feststellen, dass das Leben einfacher ist, wenn Sie Laravel-Konventionen wie "id" -Primärschlüssel befolgen, aber wenn Sie Anwendungen wie Ihre portieren, macht es manchmal Sinn, sie zu brechen. In den meisten Orten hat Laravel Möglichkeiten, dies unterzubringen. –

+0

Ich stimme dir zu. Ich hätte Laravels Konventionen benutzt, wenn ich meine Datenbankstruktur nicht vorher erstellt hätte. – salep