在Laravel中使用原始MySql语句创建外键

时间:2019-02-05 22:53:03

标签: php mysql laravel

由于我知道如何使用mySql原始语句和Laravel流利查询,这使我有些困惑,特别是用于创建表的语句,我想使用原始SQL语句创建表。

没有外键的表已成功创建,但是尝试用外键创建表时出现错误消息。例如,以下代码

$sql_kreiraj_Prof="
    CREATE TABLE profesori(
       ProfID INTEGER PRIMARY KEY NOT NULL,
       ime CHAR(15) NOT NULL,
       prezime CHAR(15) NOT NULL,
       k_ime CHAR(10) NOT NULL UNIQUE,
       sifra CHAR(15) NOT NULL)";
try {
    $sql_postoji="SELECT 1 FROM profesori LIMIT 1";
}
catch(Exception $e){
    DB::statement($sql_kreiraj_Prof);
}


$sql_kreiraj_Predmet="
    CREATE TABLE predmeti(
      PredmetID INTEGER PRIMARY KEY NOT NULL,
      naziv CHAR(100) NOT NULL UNIQUE,
      semestar ENUM ('I','II','III','IV','V','VI','VII','VIII','IX','X') NOT NULL,
      dan ENUM ('Ponedjeljak','Utorak','Srijeda','Četvrtak','Petak') NOT NULL,
      rbr_casa INTEGER NOT NULL,
      FOREIGN KEY (predavacID)
        REFERENCES profesori (ProfID)
            ON UPDATE CASCADE)";
try {
    $sql_postoji="SELECT 1 FROM predmeti LIMIT 1";
}
catch(Exception $e){
    DB::statement($sql_kreiraj_Predmet);
}

结果出现以下错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1072表中不存在键列'predavacID'(SQL:CREATE TABLE predmeti ...

我现在试图解决这一问题,因此非常欢迎提供解决此问题的建议。

1 个答案:

答案 0 :(得分:1)

  

表中不存在键列'predavacID'

该错误非常明显。您正在尝试将predavacID设置为外键,但是不存在该名称的列。您需要选择predmeti表中的整数列之一,或者在将列predavacID设置为外键之前对其进行声明。

外键约束不会隐式创建列。该列必须独立存在。