无法使用 Eloquent 即时创建新表
Cannot create new tables on the fly with Eloquent
我正在使用 Eloquent SlimPHP 和 Capsule 作为数据库 'Facade'。
现在我只是支持 MySql,因为我需要即时创建 table,所以我正在尝试构建两个查询并 运行 它们。
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 EXISTS `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` 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 `responses_44` ADD KEY `form_id` (`form_id`), ADD CONSTRAINT `responses_44_ibfk_1` FOREIGN KEY (`form_id`) REFERENCES `forms` (`id`);"
通过直接在 MySql 上测试查询,它们可以毫无错误地执行并创建 table,但是当应用于 DB::raw
时,不会抛出任何错误,并且 DB::getQueryLog()
不显示它们。
会发生什么?
谢谢
DB::statement($create_table_statement);
这就是您所需要的。 DB::raw
没有 运行 任何东西,它只是一个从未被构建器绑定的包装器,而是以原始形式传递给查询,没有转义任何东西。
您可以使用 ?
占位符并将第二个参数与绑定传递给 statement
方法。
我正在使用 Eloquent SlimPHP 和 Capsule 作为数据库 'Facade'。
现在我只是支持 MySql,因为我需要即时创建 table,所以我正在尝试构建两个查询并 运行 它们。
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 EXISTS `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` 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 `responses_44` ADD KEY `form_id` (`form_id`), ADD CONSTRAINT `responses_44_ibfk_1` FOREIGN KEY (`form_id`) REFERENCES `forms` (`id`);"
通过直接在 MySql 上测试查询,它们可以毫无错误地执行并创建 table,但是当应用于 DB::raw
时,不会抛出任何错误,并且 DB::getQueryLog()
不显示它们。
会发生什么?
谢谢
DB::statement($create_table_statement);
这就是您所需要的。 DB::raw
没有 运行 任何东西,它只是一个从未被构建器绑定的包装器,而是以原始形式传递给查询,没有转义任何东西。
您可以使用 ?
占位符并将第二个参数与绑定传递给 statement
方法。