belongsTo(City::class); } public function getCity(): City { return City::where('id', $this->city_id)->first(); } public function company(): BelongsTo { return $this->belongsTo(Company::class); } public function getCompany(): Company { return Company::where('id', $this->company_id)->first(); } public function items(): BelongsToMany { return $this->belongsToMany(Item::class, 'carts_items', 'cart_id', 'item_id'); } public function getItem(string $name): Item { $itemsIds = $this->getItemIds(); $item = Item::whereIn('id', $itemsIds) ->where('name', $name)->first(); return $item; } public function getItemJSON() { $items = $this->items; $itemJSON = []; foreach($items as $item) array_push($itemJSON, [ 'id' =>$item->uuid, 'count'=> $item->count ]); return $itemJSON; } public function getItemIds(): array { return $this->items()->pluck('item_id')->toArray(); } public function isItemIn(Item $item): bool { $itemsIds = $this->getItemIds(); $countOfMatches = Item::whereIn('id', $itemsIds) ->where('uuid', $item->uuid) ->count(); return $countOfMatches != 0; } public function isEmpty() { return count($this->getItemIds()); } public function dropItems() { $this->items()->detach(); } public function setCity(City $city) { if($this->city_id == $city->id) return; $this->city_id = $city->id; if(!$this->isEmpty()) $this->dropItems(); $this->save(); } public function setCompany(Company $company) { if($this->company_id == $company->id) return; $this->company_id = $company->id; if(!$this->isEmpty()) $this->dropItems(); $this->save(); } public function addItemId(int $item_id) { $this->addItemIds([$item_id]); } public function addItemIds(array $item_ids) { $itemIDs = array_merge($this->getItemIds(), $item_ids); $this->items()->sync($itemIDs); } public function removeItemId(int $item_id) { $this->items()->detach($item_id); } public function removeItemIds(array $items_ids) { $this->items()->detach($items_ids); } }