laravel - Eloquent:我需要直接做这个查询吗?
问题描述
我正在使用 laravel/eloquent 重写部分遗留软件。
我对典型的 eloquent 的理解很好,我在 laravel 中做过一些项目,但对于遗留代码并没有那么多。
我正在尝试用 eloquent 来创建 79 行:
INSERT IGNORE INTO `ps_module_shop` (`id_module`, `enable_device`, id_shop) (SELECT `id_module`, `enable_device`, 555 FROM ps_module_shop WHERE `id_shop` = 1);
我读过你只能使用批量插入,model::insert
但我不确定如何使用这个查询,除了纯 sql。
这就是我现在的做法,但是对于这个查询来说,原始 sql 感觉更优雅:
$blkInsert = [];
$tplModuleShop = ModuleShop::where('id_shop', 1)->get();
foreach($tplModuleShop as $mshop) {
$blkInsert[] = [
'id_module' => $mshop->id_module,
'enable_device' => $mshop->enable_device,
'id_shop' => $shop->id_shop,
];
}
ModuleShop::insert($blkInsert);
注意:我知道这是一个数据透视表,但它是使用复合键的遗留数据库,所以我决定将其视为自己的模型。
解决方案
老实说,这可能只是使用你的 sql 语句更容易......这是我的尝试:
DB::table('ps_model_shop')
->insert(DB::table('ps_module_shop')
->select(['id_module', 'enable_device'])
->where('id_shop', 1)
->get()
->map(function($module){
$module['id_shop'] = 555;
})
->toArray()
);
推荐阅读
- python - 分配前引用的页面
- cuda - CUDA 块级共享寄存器
- python - 为什么即使在安装 django-geoposition 之后我的地理定位也不起作用
- java - 在 H2 内存 DB 和 Spring boot @Entity 类之间存储和检索 JSON 类型数据
- node.js - 如何在反应中隐藏数据库信息?
- jenkins - 如何在 jenkinsfile 中定义触发源
- windows - 在 Windows 上的 Jenkins 容器中构建 maven 项目时找不到 Docker
- python - Pybind11 绑定访问 Gst.Buffer
- python - Python 3.7 中带有列表初始化的嵌套字典
- python - Django中的虚拟环境