2015-08-07 28 views
7

https://github.com/Xethron/migrations-generatorLaravel 5.1: Di chuyển cơ sở dữ liệu hiện có

tôi đã di chuyển cấu trúc cơ sở dữ liệu của tôi vào Laravel sử dụng php artisan migrate:generate lệnh với sự giúp đỡ của phần mở rộng ở trên. Nhưng có một vấn đề nhỏ, khóa chính của tôi không được đặt tên là id, tôi thay vì sử dụng một quy ước khác bằng cách thêm tiền tố cho mỗi người trong số họ như user_id, product_id, photo_id, v.v. Tất cả đều là tự động tăng lên, tất nhiên.

Đây là tệp create_users_table.php hiện tại của tôi bên trong thư mục di chuyển của tôi. Tôi đã xác định user_id để ghi đè tùy chọn id mặc định, đó có phải là sử dụng đúng không?

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

tôi đọc mà tôi cần thêm một cái gì đó như dưới đây, nhưng tôi không chắc chắn nơi để xác định protected $primaryKey kể từ khi lớp học của tôi kéo dài Migration hơn là hùng hồn.

class CreateUsersTable extends Eloquent { 

    protected $primaryKey = 'user_id'; 

} 

Tôi gặp phải lỗi sau khi truy cập/auth/trang đăng nhập mà tôi cho là do sử dụng user_id thay vì id. Làm thế nào tôi có thể sửa chữa nó?

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

Trả lời

3

Bạn cần phải xác định khóa chính không phải mặc định của bạn trong mô hình User của bạn:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model { 

    protected $primaryKey = 'user_id'; 

Bạn sẽ cần phải làm điều này cho tất cả các mô hình mà không sử dụng id như khóa chính của họ.

+1

Aaavà nó hoạt động. Cảm ơn nhiều. – salep

+1

Không sao cả. Bạn sẽ thấy cuộc sống dễ dàng hơn nếu bạn làm theo các quy ước của Laravel như sử dụng các khóa chính 'id', nhưng khi bạn đang chuyển các ứng dụng như của bạn đôi khi nó có ý nghĩa để phá vỡ chúng. Ở hầu hết các nơi, Laravel có cách để điều này. –

+0

Tôi đồng ý với bạn. Tôi đã sử dụng các quy ước của Laravel nếu trước đây tôi chưa tạo cấu trúc cơ sở dữ liệu của mình. – salep

Các vấn đề liên quan