【问题标题】:Creating foreign key using raw MySql statement in Laravel在 Laravel 中使用原始 MySql 语句创建外键
【发布时间】:2019-06-29 20:29:50
【问题描述】:

由于我知道如何使用 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...

我现在正在尝试解决这个问题,因此非常欢迎任何有关如何解决此问题的建议。

【问题讨论】:

  • 使用 laravel migrations 怎么样? laravel 还有 DB:select() 用于查询和 DB::statement() 用于运行语句。

标签: php mysql laravel


【解决方案1】:

表中不存在键列“predavacID”

这个错误很明显。您正在尝试将 predavacID 设为外键,但不存在该名称的列。您要么需要在predmeti 表中选择一个整数列,要么在将其设为外键之前声明predavacID 列。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2017-03-22
    • 1970-01-01
    • 2015-01-18
    相关资源
    最近更新 更多