我正在使用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()
也不会显示错误。
可能会发生什么?
由于
答案 0 :(得分:1)
DB::statement($create_table_statement);
这就是你所需要的。 DB::raw
不会运行任何东西,它只是一个永远不会被构建器绑定的包装器,而是以原始形式传递给查询,而不会转义任何内容。
您可以使用?
占位符并将第2个参数传递给statement
方法。