laravel - 从已获取的集合中删除父级及其所有子级
问题描述
这是我的桌子的样子:
Cars:
+-------+---------+---------+
| Type | Name | Brand |
+-------+---------+---------+
| brand | BMW | null |
| brand | Audi | null |
| model | X3 | BMW |
| model | A4 | Audi |
| model | Picasso | Citroen |
+-------+---------+---------+
如您所见,表中有些型号的品牌未作为单独的记录列出。我还需要将这些包含在我的结果中(并且我不允许将新记录添加到表中,因此我无法添加brand | Citroen | null
行)。我的尝试是首先从表中获取所有条目,然后在foreach
循环中我将只过滤brand
类型的值。对于每个品牌,一旦将其添加到表中,我将删除该记录,Collection
但也会删除它的所有子项。这样,剩下的唯一记录$entries
将是那些model
没有“父”记录的类型:
function filter() {
$entries = Car::get();
$result = [];
foreach($entries as $entry) {
if($entry->type == 'brand') {
$result[] = $entry->name;
//delete $entry and all $entry->models from $entries
}
}
foreach($entries as $entry) {
$result[] = $entry->brand;
}
return $result;
}
是否可以一次删除一个以上的集合元素?
brand
以下是和之间的关系model
:
class Car {
public function models() {
return $this->hasMany(Car::class, 'brand', 'brand')->where('type', 'model');
}
}
编辑:
这只是我真实代码的简化版本。因此,我没有字符串数组,而是对象数组,我不能添加重复值然后使用array_uniqe
. 我实际上是$result
用整行填充数组,因为我需要稍后在前端使用它。
解决方案
我不确定我是否完全理解您的要求。但是,据我了解,您希望过滤从数据库中获取的集合,以便仅将类型为模型的记录留在集合中。
$results = [];
$entries = Car::get()
->reject(function($car) {
return $car->type === 'model';
})->values()->all();
让我知道我的理解是否正确。
推荐阅读
- node.js - 在nodejs中的Firebase Functions HTTPS请求中报告错误的正确方法
- firebase - 如何在 Firestore 中为 Flutter 应用查询最近的地理点?
- ios - iOS 14 应用程序开发:如何避免应用程序删除警报出现空字符串(删除/移动到应用程序库的警报)?
- json - 颤振 | 为什么我的 json 文件在我尝试访问它时会转换为 firebase 上的文件夹?
- android - Android.Clean Arch。将数据从域发送到数据层
- python - 如何在 Tkinter 中访问超出窗口大小的条目
- javascript - 在 Javascript 中运行 PHP
- javascript - 如何防止javascript触发点击事件队列
- javascript - 数据驱动方法的量角器故障和浏览器处理
- reactjs - Gatsby Netlify 构建错误:无法解析“/opt/build/repo/src/templates”中的“../components/GridTemplate/GridTemplate.js”