【问题标题】:Cannot create new tables on the fly with Eloquent无法使用 Eloquent 即时创建新表
【发布时间】:2015-06-14 04:30:44
【问题描述】:

我将 Eloquent 与 SlimPHP 和 Capsule 一起用作 DB 'Facade'。

现在我只是为 MySql 提供支持,因为我需要动态创建表,所以我正在尝试构建两个查询并运行它们。

DB::raw($create_table_statement);
DB::raw($add_keys_statement);

什么时候做

var_dump($create_table_statement);
var_dump($add_keys_statement);

要查看查询是如何构建的,如下所示:

string(351) "如果不存在 `responses_44` (`id` int(11) NOT NULL AUTO_INCREMENT,`field_20` varchar(150),`field_21` varchar(150),`created_at` timestamp NOT NULL,则创建表DEFAULT CURRENT_TIMESTAMP,`updated_at` 时间戳 NOT NULL DEFAULT '0000-00-00 00:00:00',`form_id` int(11) NOT NULL,primary key(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; "

string(158) " ALTER TABLE `responses_44` ADD KEY `form_id` (`form_id`), ADD CONSTRAINT `responses_44_ibfk_1` FOREIGN KEY (`form_id`) REFERENCES `forms` (`id`);"

通过直接在 MySql 上测试查询,它们可以在没有错误的情况下执行并创建表,但是当应用于 DB::raw 时,不会引发错误,并且 DB::getQueryLog() 不会显示它们。

会发生什么?

谢谢

【问题讨论】:

  • 如果你在这里复制粘贴,你使用的分隔符是反引号`,而不是单引号'
  • 感谢您的关注,已编辑

标签: php mysql laravel eloquent


【解决方案1】:
DB::statement($create_table_statement);

这就是你所需要的。 DB::raw 不运行任何东西,它只是一个包装器,从不被构建器绑定,而是以原始形式传递给查询,而不转义任何东西。

您也可以使用? 占位符并将带有绑定的第二个参数传递给statement 方法。

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 2014-05-12
    • 2013-04-06
    • 2014-01-05
    • 2018-01-17
    • 2014-08-30
    相关资源
    最近更新 更多