Laravel Eloquent 集合如果存在于数组中则从集合中删除项目
Laravel Eloquent Collection remove item from Collection if exist in array
我今天遇到了一个简单的问题。我在 Livewire Component 中工作,我有一个对象集合,当我单击一个对象时,我想将它添加到一个数组(有效),然后想从集合中删除它 - 所以该对象不是可以点击了。
我有:
public function addPartToUsage($partId){
$partToAdd = Part::where('id', '=', $partId)->first();
$this->verwendung[] = ['id'=> $partToAdd->id, 'partBezeichnung'=>$partToAdd->id.':'.$partToAdd->zeichnungsnummer.' - '.$partToAdd->artikelbezeichnung];
$this->partsClient = Part::where('artikelbezeichnung', 'LIKE', '%' . $this->inputsearchpart . '%')
->orWhere('zeichnungsnummer', 'LIKE', '%' . $this->inputsearchpart . '%')
->orderBy('artikelnummer')
->get();
foreach ($this->verwendung as $item) {
if($this->partsClient->contains('id', $item['id'])){
$this->partsClient->forget($this->partsClient->where('id', $item['id'])->id);
} } }
但它不起作用,因为我不知道包含匹配 ID 的元素的键。
$this->verwendung 是我的数组,它保存 $this->verwendung[0]['id'] 中的 id 和
$this->partsClient 是我从数据库中收集的。
如何修改集合而不将其放入数组,然后检查匹配的 ID,然后重新收集?
或者更好的方法是如何检索集合的匹配键,以便我可以使用 forget() ?
感谢这里的所有人!
无需检查id是否包含在集合中,您可以直接使用reject()
过滤它
foreach ($this->verwendung as $item) {
$this->partsClient->reject(function ($value, $key) use ($item) {
return $value->id == $item['id'];
});
}
或者干脆
$verwendungCollection = collect($this->verwendung);
$idsToRemove = $verwendungCollection->pluck('id')->toArray();
$this->partsClient->reject(function ($value, $key) use ($item) {
return in_array($value->id, $idsToRemove);
});
我今天遇到了一个简单的问题。我在 Livewire Component 中工作,我有一个对象集合,当我单击一个对象时,我想将它添加到一个数组(有效),然后想从集合中删除它 - 所以该对象不是可以点击了。 我有:
public function addPartToUsage($partId){
$partToAdd = Part::where('id', '=', $partId)->first();
$this->verwendung[] = ['id'=> $partToAdd->id, 'partBezeichnung'=>$partToAdd->id.':'.$partToAdd->zeichnungsnummer.' - '.$partToAdd->artikelbezeichnung];
$this->partsClient = Part::where('artikelbezeichnung', 'LIKE', '%' . $this->inputsearchpart . '%')
->orWhere('zeichnungsnummer', 'LIKE', '%' . $this->inputsearchpart . '%')
->orderBy('artikelnummer')
->get();
foreach ($this->verwendung as $item) {
if($this->partsClient->contains('id', $item['id'])){
$this->partsClient->forget($this->partsClient->where('id', $item['id'])->id);
} } }
但它不起作用,因为我不知道包含匹配 ID 的元素的键。
$this->verwendung 是我的数组,它保存 $this->verwendung[0]['id'] 中的 id 和 $this->partsClient 是我从数据库中收集的。
如何修改集合而不将其放入数组,然后检查匹配的 ID,然后重新收集? 或者更好的方法是如何检索集合的匹配键,以便我可以使用 forget() ? 感谢这里的所有人!
无需检查id是否包含在集合中,您可以直接使用reject()
过滤它
foreach ($this->verwendung as $item) {
$this->partsClient->reject(function ($value, $key) use ($item) {
return $value->id == $item['id'];
});
}
或者干脆
$verwendungCollection = collect($this->verwendung);
$idsToRemove = $verwendungCollection->pluck('id')->toArray();
$this->partsClient->reject(function ($value, $key) use ($item) {
return in_array($value->id, $idsToRemove);
});