2015-08-07 22 views
7

https://github.com/Xethron/migrations-generatorlaravel 5.1: Migracja istniejącej bazy danych

I migracji bazy danych do mojego struktury laravel pomocą polecenia php artisan migrate:generate za pomocą rozszerzenia powyżej. Ale jest mały problem, mój klucz podstawowy nie jest nazwany jako id, ja raczej użyłem innej konwencji, dodając przedrostek dla każdego z nich, taki jak user_id, product_id, photo_id, itd. Wszystkie te są automatycznie zwiększane, oczywiście.

Oto mój obecny plik create_users_table.php w folderze migracji. Zdefiniowałem user_id, aby zastąpić domyślną opcję id, czy to właściwe użycie?

<?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'); 
} 
} 

Czytałem, że muszę dodać coś jak poniżej, ale nie jestem pewien, gdzie do zdefiniowania protected $primaryKey ponieważ moja klasa rozszerza Migracja zamiast wymowny.

class CreateUsersTable extends Eloquent { 

    protected $primaryKey = 'user_id'; 

} 

Dostaję następujący błąd, gdy idę do/auth/stronę logowania, która myślę, że ze względu na przyczyny user_id użycia zamiast id. Jak mogę to naprawić?

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

Odpowiedz

3

Musisz określić niż domyślny klucz podstawowy w modelu User:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model { 

    protected $primaryKey = 'user_id'; 

Trzeba to zrobić dla wszystkich modeli, które nie korzystają id jako podstawowego klucza.

+1

Aaa i zadziałało. Dziękuję Ci bardzo. – salep

+1

Bez problemu. Życie będzie łatwiejsze, jeśli będziesz postępować zgodnie z konwencjami Laravel, np. Używając podstawowych kluczy 'id', ale kiedy przenosisz aplikacje takie jak Twoja, czasami warto je łamać. W większości miejsc Laravel ma sposoby na to. –

+0

Zgadzam się z tobą. Wykorzystałbym konwencje Laravela, jeśli wcześniej nie utworzyłem struktury bazy danych. – salep

Powiązane problemy