2015-08-07 24 views
7

https://github.com/Xethron/migrations-generatorlaravel 5.1: Yukarıda uzantısı yardımıyla <code>php artisan migrate:generate</code> komutunu kullanarak laravel içine benim veritabanı yapısını göç

veritabanını varolan taşıyın. Ama küçük bir sorun var, birincil anahtarım kimlik olarak adlandırılmadı, her biri için user_id, product_id, photo_id vb. Için bir önek ekleyerek farklı bir kuralı kullandım. Bunların hepsi otomatik olarak artmış.

Şu andaki create_users_table.php dosyasım göçlerim klasörünün içinde. Varsayılan kimlik seçeneğini geçersiz kılmak için user_id öğesini tanımladım, doğru kullanım mı?

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

ben aşağıda gibi bir şey eklemek gerektiğini okumak, ama benim sınıf Göç ziyade anlamlı uzanır beri protected $primaryKey tanımlamak için nereye emin değilim.

class CreateUsersTable extends Eloquent { 

    protected $primaryKey = 'user_id'; 

} 

ben çünkü user_id kullanım yerine id nedenlerini düşünmek/auth/giriş sayfası, gittiğimde aşağıdaki hatayı alıyorum. Bunu nasıl düzeltebilirim?

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

cevap

3

Sen User modelinde sizin varsayılan olmayan birincil anahtar belirtmek gerekir:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model { 

    protected $primaryKey = 'user_id'; 

Onların birincil anahtar olarak id kullanmayan tüm modeller için bunu yapmak gerekir.

+1

Aaaand çalıştı. Çok teşekkür ederim. – salep

+1

Sorun değil. 'Id' birincil anahtarlarını kullanma gibi Laravel kurallarını takip ederseniz, yaşamı daha kolay bulacaksınız, ancak sizinki gibi uygulamaları taşıdığınızda bazen onları kırmak mantıklıdır. Çoğu yerde, Laravel'in buna uyum sağlama yolları vardır. –

+0

Sana katılıyorum. Daha önce veritabanı yapımı yaratmamış olsaydım Laravel'in kurallarını kullanırdım. – salep