95

コメント テーブルに値を挿入しようとすると、エラーが発生します。子行を追加または更新できないと言っていますが、それが何を意味するのかわかりません。

私のスキーマは次のようになります

-- ----------------------------
-- Table structure for `comments`
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
  `id` varchar(36) NOT NULL,
  `project_id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `task_id` varchar(36) NOT NULL,
  `data_type_id` varchar(36) NOT NULL,
  `data_path` varchar(255) DEFAULT NULL,
  `message` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_comments_users` (`user_id`),
  KEY `fk_comments_projects1` (`project_id`),
  KEY `fk_comments_data_types1` (`data_type_id`),
  CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of comments
-- ----------------------------

-- ----------------------------
-- Table structure for `projects`
-- ----------------------------
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
  `id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_projects_users1` (`user_id`),
  CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Records of projects
-- ----------------------------
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Brand New Project', 'This is a brand new project', '2012-12-27 15:24:02', '2012-12-27 15:24:02');

そして、私がやろうとしているmysqlステートメントは次のようになります

INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`) 
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'this is a test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3')

私が得るエラーはこのようになります

SQLSTATE [23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました ( anthonyl_fbpj. comments, CONSTRAINT fk_comments_projects1 FOREIGN KEY ( project_id) REFERENCES projects( id) ON DELETE NO ACTION ON UPDATE NO ACTION)

4

17 に答える 17

140

project_id挿入しているtableの column の値がtablecommentsに存在しないことを意味しますprojects。column project_idon tableの値はon tablecommentsの値に依存することに注意してください。IDProjects

50dc845a-83e4-4db3-8705-5432ae7aaee3column に挿入しようとしている値project_idは、 table に存在しませんprojects

于 2012-12-28T02:03:34.350 に答える
51

project_idモデルのfillableプロパティにあることを確認してくださいComment

私は同じ問題を抱えていましたが、これが理由でした。

于 2015-08-24T06:55:41.880 に答える
4

テーブルを正しい順序で作成および設定していない場合にも、このエラーが発生します。たとえば、スキーマによると、Comments テーブルにはuser_idproject_idtask_idおよびが必要data_type_idです。つまり、Usersテーブル、Projectsテーブル、Taskテーブル、およびData_Typeテーブルは、ID またはその他の列を参照する前に、既に存在し、値が含まれている必要があります。

Laravel では、これはデータベースのシーダーを正しい順序で呼び出すことを意味します。

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserSeeder::class);
        $this->call(ProjectSeeder::class);
        $this->call(TaskSeeder::class);
        $this->call(DataTypeSeeder::class);
        $this->call(CommentSeeder::class);
    }
}

これは、私が同様の問題を解決した方法です。

于 2020-07-22T10:04:07.767 に答える