php - 在 Laravel 中创建一个 Insert...Select 语句

标签 php mysql laravel

我需要为 Laravel 转换此查询,但在尝试使用 Laravel 的 Eloquont ORM 或查询创建 Insert...Select 语句时遇到问题。我不确定我将如何创建此查询。

Insert into Demand (Login, Name, ApptTime, Phone, Physician, Location, FormatName, FormatDate, FormatTime, ApptDate, FormatPhone, cellphone)
Select Login, Name, ApptTime, Phone, Physician, Location, FormatName, FormatDate, FormatTime, ApptDate, FormatPhone, cellphone from " . [dbname] . "
    Where " . $where_statement

如何使用 Laravel 的 ORM 创建此查询?

编辑:我不确定这是否清楚,但我在考虑 1 个查询,就像他们在这里做的那样 http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

最佳答案

没有办法在一个查询中执行此操作(除非你使用的是 Laravel 5.7),但是我遇到了同样的问题并且想确保我可以继续使用我用 QueryBuilder 构建的某个选择。

那么你可以做些什么,让事情保持一半的干净并重用之前构建了 select 语句的功能,是这样的:

/**
 * Wherever your Select may come from
 **/
$select = User::where(...)
                  ->where(...)
                  ->whereIn(...)
                  ->select(array('email','moneyOwing'));
/**
 * get the binding parameters
 **/ 
$bindings = $select->getBindings();
/**
 * now go down to the "Network Layer"
 * and do a hard coded select
 */
 $insertQuery = 'INSERT into user_debt_collection (email,dinero) '
                . $select->toSql();
    
 \DB::insert($insertQuery, $bindings);

更新 Laravel 5.7

从 Laravel 5.7.17 开始,您可以使用 ->insertUsing()。见 here了解详情。感谢@Soulriser 指出这一点。

所以上面的查询看起来像这样:

DB::table('user_debt_collection')->insertUsing(['email','dinero'], $select);

关于php - 在 Laravel 中创建一个 Insert...Select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25533608/

相关文章:

php - 在 PHP 中查询速度慢但在客户端中查询速度快

php - 在 PHP 中向 MySQL 插入多行(单个查询): Prepare-Execute vs. 准备-绑定(bind)-执行

javascript - PHP AJAX 上传无法正常使用 php ://input

javascript - 带有隐藏字段的表单提交

php - 如何在一个月的特定日期安排 Laravel 任务?

mysql - SQL 查询将我的数字返回为字符串而不是整数

php - 有没有办法显示数组中的哪个元素验证失败?

javascript - 错误 Ajax 和 Laravel 500(内部服务器错误)

php - 如何使用 PHP cURL XML 调用附加文件

php - 检查食谱是否包含成分 - MYSQL