php - 如何编码数据数组并保存到数据透视表 laravel
问题描述
我在这里想要的只是能够将所有服务 ID 保存到与给定关键字/标签关联的数据透视表中,但目前它所做的只是获取创建对象的最后一个 ID 并保存到数据透视表中用不同的关键词。假设我输入 [id1 => service1, id2 => service2] 和 [id1 = > keyword1, id2 => keyword2, id3 => keyword3] 而不是只保存 service2 的 id2 和我想要的所有关键字保存所有服务的所有 ID 和关键字。我希望这是有道理的
foreach($params['service'] as $key => $value){
$service = Service::firstOrNew(['service' => $value, 'price' => $params['price'][$key], 'business_id' => $params['business_id']]);
$service->service = $value;
$service->price = $params['price'][$key];
$service->business_id = $params['business_id'];
$service->save();
}
foreach($params['keywords'] as $keyword){
$cleaned_keyword = self::cleanKeywords($keyword);
$newKeyword = Keyword::firstOrNew(['keyword' => $cleaned_keyword]);
$newKeyword->keyword = $cleaned_keyword;
$newKeyword->save();
$service->keywords()->syncWithoutDetaching([$newKeyword->id => ['business_id' => $params['business_id']]]);
}
这是我所期望的,但它很棘手,因为例如一个或两个服务可以有多个关键字。注意:我在数据库中手动更改了这些值
这些是 dd($params) 的结果
基于 dd($params).attached 是结果,只有
"service" => array:2[
1 => "Mobile development"
]
已保存在数据透视表中并分配了所有关键字
解决方案
如果这是一个好方法,请纠正我,我设法通过内部循环解决了这个问题。
foreach($params['service'] as $key => $value) {
$service = Service::firstOrNew(['service' => $value, 'price' => $params['price'][$key], 'business_id' => $params['business_id']]);
$service->service = $value;
$service->price = $params['price'][$key];
$service->business_id = $params['business_id'];
$service->save();
foreach($params['keywords'] as $keyword) {
$cleaned_keyword = self::cleanKeywords($keyword);
$newKeyword = Keyword::firstOrNew(['keyword' => $cleaned_keyword]);
$newKeyword->keyword = $cleaned_keyword;
$newKeyword->save();
$service->keywords()->syncWithoutDetaching([$newKeyword->id => ['business_id' => $params['business_id']]]);
}
}
推荐阅读
- python - Python pandas 有效地发现数据帧中连续行的时间差异
- javascript - 当 ctx 沿 X 轴移动时,如何更改画布 globalAlpha
- unit-testing - 在没有 DI 的情况下在 golang 中模拟和监视
- javascript - 在 Python 中使用请求时如何绕过 JavaScript 检测?
- oracle - 使用 ssis 连接到 Oracle 数据库
- python - 如何构建一个空表以最终保存一个时间戳列和两个浮点列,严格使用 numpy 并且不允许使用 pandas?
- android - Android 从右向左滑动以展开片段
- spring - 如何将值从表单传递:选择在spring boot中的控制器
- python - 分而治之的排序算法难度
- jquery - 在 jquery 中使用数据表时使用列名检索行数据