Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Syntax error or access violation error while running "php artisan migrate" for migration file containing primary & foreign keys

Hi i am trying to create 2 tables in my DB named "brand" & "product". I have created migration file for "brand" called "create_brand" that contains:

public function up()
{
    Schema::create('brand', function($table){
        $table->increments('brand_id');
        $table->string('brand_name', 100);
    });
}

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

The migration file for "product" called "create_product" contains:

public function up()
{
    Schema::create('product', function($table){
        $table->increments('skuid');
        $table->integer('brand_id')->unasigned();
    });

    Schema::create('product', function($table){
        $table->foreign('brand_id')->references('brand_id')->on('brand')->onDelete('cascade');
    });


}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('product', function($table){
        $table->dropForeign('brand_id');
    });

    Schema::drop('product');
}

Now when i run "php artisan migrate" i get the error:

  [Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i
  your SQL syntax; check the manual that corresponds to your MySQL server v
  ersion for the right syntax to use near ') default character set utf8 colla
  te utf8_unicode_ci' at line 1 (SQL: create table `product` () default chara
  cter set utf8 collate utf8_unicode_ci)


  [PDOException]
  SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error i
  n your SQL syntax; check the manual that corresponds to your MySQL server v
  ersion for the right syntax to use near ') default character set utf8 colla
  te utf8_unicode_ci' at line 1

I would be really grateful if someone could help me solve this issue :) Thanks.

like image 259
8yt3c0d3 Avatar asked Jan 15 '15 17:01

8yt3c0d3


1 Answers

Use Schema::create just once. To edit the table use Schema::table

And when using foreign key the type should be unsignedInteger. If you create a basic integer and try to put a foreign key on it, it will fail.

Change your codes to

public function up()
{
    Schema::create('product', function($table){
       $table->increments('skuid');
       $table->unsignedInteger('brand_id');
    });

    Schema::table('product', function($table){
       $table->foreign('brand_id')->references('brand_id')->on('brand');
    });
}

/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
    Schema::drop('product');
}
like image 70
littlemissbot Avatar answered Sep 28 '22 00:09

littlemissbot