当前位置: 首页 > 面试题库 >

在Laravel 4迁移中创建MYSQL过程

尉迟高澹
2023-03-14
问题内容

有没有办法在Laravel 4迁移中生成存储的MYSQL过程?

例如,这是一个简单的过程生成查询,以字符串形式存储(通过Heredoc)

    $query = <<<SQL
DELIMITER $$
DROP PROCEDURE IF EXISTS test$$
CREATE PROCEDURE test()
BEGIN
    INSERT INTO `test_table`(`name`) VALUES('test');
END$$
DELIMITER ;
SQL;

    DB:statement(DB::RAW($query));

在迁移up()函数中运行此命令时,出现以下错误:

在此处输入图片说明


问题答案:

您的代码有两个主要问题

  1. DELIMITER不是有效的sql语句。这只是一个MySql客户端命令。因此,请不要使用它。 顺便说一句 ,您得到的错误恰恰告诉您。
  2. 您无法使用DB::statement来执行CREATE PROCEDURE代码,因为它使用的预准备语句源代码Connection。您可以使用PDO 来代替exec() DB::connection()->getPdo()->exec()

话虽如此,虚tags表的样本迁移可能看起来像这样

class CreateTagsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tags', function($table){
            $table->increments('id');
            $table->string('name')->unique();
        });
$sql = <<<SQL
DROP PROCEDURE IF EXISTS sp_insert_tag;
CREATE PROCEDURE sp_insert_tag(IN _name VARCHAR(32))
BEGIN
    INSERT INTO `tags`(`name`) VALUES(_name);
END
SQL;
        DB::connection()->getPdo()->exec($sql);
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        $sql = "DROP PROCEDURE IF EXISTS sp_insert_tag";
        DB::connection()->getPdo()->exec($sql);
        Schema::drop('tags');
    }
}


 类似资料:
  • Nodejs。顺序4.41。尝试通过另一个表制作两个多对多关系的模型。例如,使用sequelize-cli运行... 这里有模特 和 留档里有短语 属于多个关联用于连接具有多个目标的源。此外,目标也可以连接到多个源。 这将创建一个名为UserProject的新模型,该模型具有等效的外键Project ectId和userId。 迁移是 和 为什么在我运行迁移时,它不创建模型CameraRelay,

  • 迁移Topic,是指把Topic从“开放平台账号”迁移到“生态云账号”体系下,这样才能够进行接下来的数据流配置操作; 接下来以在开放平台账号下(即目前的旧版流式消息队列页面)创建Topic然后进行迁移为例来讲解(如果已经有Topic,则直接操作迁移即可); 选择生态云机房 所选生态云机房需要和上一节 FDS Bucket所在机房相同。 创建Topic 如图所示,在“产品”下点击"流式消息队列",点

  • 我正在从事一个项目,我正在使用laravel 5.8。这里我想创建一个外键。我试了很多次,但每次都收到一条关于迁移时间的错误消息。有三个表一个是行业,是小学和学生,这些是第二个表。我想在这两个辅助表trade_id上创建一个外键作为键的名称。 这是交易表(主表)。 这是学生表(辅助表)。 这是放置表(辅助表)。 在迁移时出现错误。

  • 创建迁移脚本 生成一个迁移脚本框架 让我们从创建一个新的 Phinx 迁移脚本开始。使用 create 命令: $ php vendor/bin/phinx create MyNewMigration 这将创建一个新的迁移脚本,格式是 YYYYMMDDHHMMSS_my_new_migration.php ,前14个字符是当前的timestamp,精确到秒。 如果你指定了多个脚本路径,将会提示你

  • Laravel版本:5.7 PHP版本: 7.2.9 数据库驱动程序 说明上次迁移创建表,但未在迁移表中注册 繁殖步骤我有14个迁移。如果我运行的表被创建,但没有注册为运行迁移我已经丢弃了家庭数据库几次 我的迁移状态表 最终,当我想刷新、回滚或迁移以进行开发时,我会收到这样一个错误,告诉我表存在,但不在迁移中 Illumb\Database\QueryException:SQLSTATE[42S0

  • 问题内容: 我已经学习了一个星期左右的时间来使用EF,并且一直困扰于创建/更新数据库的问题。如果数据库不存在,我可以创建一个初始化器来创建数据库: 或者我可以创建一个配置来迁移数据库 每个都可以正常工作,但我还没有想办法做到这两个。我可以通过更改SetInitializer调用在两个初始值设定项之间进行切换,但是如果我想创建数据库(如果该数据库不存在的话),并且还要迁移它(如果这样做的话)呢?我需