无法使用Eloquent动态创建新表

时间:2015-04-09 00:44:52

标签: php mysql laravel eloquent

我正在使用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)" CREATE TABLE IF NOT NOT EXISTS`response_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` timestamp 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`response_44`ADD KEY`form_id`(`form_id`),ADD CONSTRAINT`response_44_ibfk_1` FOREIGN KEY(`form_id`)REFERENCES`forms`(`id`);"

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

可能会发生什么?

由于

1 个答案:

答案 0 :(得分:1)

DB::statement($create_table_statement);

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

您可以使用?占位符并将第2个参数传递给statement方法。