How do you use a BIGINT as an Auto-Incrementing Primary Key in Laravel 4

18,299

Solution 1

You most likely forgot to also set the type of your role_id foreign key as BIGINT(20) as well. This isn't really a Laravel issue, but rather MySQL's.


By the way, Laravel does have a native function to do this:

$this->bigIncrements('id');

This takes care of making it unsigned, auto increment and primary key.

Solution 2

When using bigInteger() also applying it to foreign key in some table, make sure you connect it properly with unsignedBigInteger(),

public function up()
{
        Schema::create('create_this_table_after_users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('user_id');
           // Other Columns
        });
        Schema::table('create_this_table_after_users', function($table) {
            $table->foreign('user_id')->references('id')->on('users');
            // Other Constraints 
        });
}

Reference Link of the Laravel 4.2 Doc

Share:
18,299

Related videos on Youtube

reikyoushin
Author by

reikyoushin

Updated on June 04, 2022

Comments

  • reikyoushin
    reikyoushin almost 2 years

    I am trying to mimic wordpress' primary key size which is BIGINT(20) but it seems that laravel doesn't have a native function to do this.. I saw a page in the laravel forums and got a code like this:

    $table->bigInteger('id')->primary();

    but when i try to attach a foreign key to that id during artisan migrate, there is a MYSQL error that is thrown:

    [Exception] SQLSTATE[HY000]: General error: 1005 Can't create table 'db.#sql- 1730_15' (errno: 150) (SQL: alter table users add constraint users_role_id_foreign foreign key (role_id) references roles (id)) (Bindings: array ( ))

    What is the proper way to do this or where do i get this thing wrong?

    thanks!

    • Loken Makwana
      Loken Makwana over 10 years
      This is not laravel issue, it's related to foreignkey, the column pair of foreignkey and it's primarykey must be of same type, you can remove primarykey, change type of both columns and set primarykey back
  • reikyoushin
    reikyoushin over 10 years
    Hi, seems ->primary() doesn't make it an auto-increment key.. maybe that's why. now my question is how should i have done it with laravel?
  • rmobis
    rmobis over 10 years
    Found the native function for this. Updated the answer.
  • reikyoushin
    reikyoushin over 10 years
    yeah saw it already too (see here). was about to answer my own question but you edited it before me.. the problem is the error persists even if i use $this->bigIncrements('id'); on both users and roles tables..
  • reikyoushin
    reikyoushin over 10 years
    and yes it is now a native function, just not yet documented on the main site.. it is on the API but not on the docs yet
  • rmobis
    rmobis over 10 years
    Ye, most of the methods arent't there, mainly because there's a lot that's inherited form other projects, suc. Anyway. can I see the rest of your mgiration?
  • reikyoushin
    reikyoushin over 10 years
    oh, nvm.. found it while i was copy pasting my code to the question.. yes it is indeed a type mismatch. didn't realize i was still using $table->unsignedInteger('role_id');, i have updated it to $table->unsignedBigInteger('role_id'); now. thanks a lot!
  • Rytis Dereskevicius
    Rytis Dereskevicius about 5 years
    Thanks, mate! I was searching why I keep getting this error General error: 1215 Cannot add foreign key constraint.
  • Vipertecpro
    Vipertecpro about 5 years
    :) Glade i helped you.. Happy Coding
  • wobsoriano
    wobsoriano over 4 years
    Oh man after so many tries with my migration in Laravel 5.8. This helped a lot.
  • Nawaraj
    Nawaraj over 4 years
    @reikyoushin I have also done the same mistake, thank you for your answer

Related