You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
1.8 KiB

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use App\Models\City;
use App\Models\Company;
use Brick\Math\BigInteger;
class Cart extends Model
{
use HasFactory;
protected $fillable = [
'status', // CART | DONE
'user_id',
'city_id',
'company_id'
];
public function city(): BelongsTo
{
return $this->belongsTo(City::class);
}
public function company(): BelongsTo
{
return $this->belongsTo(Company::class);
}
public function items(): BelongsToMany
{
return $this->belongsToMany(Item::class, 'carts_items', 'cart_id', 'item_id');
}
public function isEmpty() {
return count($this->items()->pluck('item_id')->toArray());
}
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 addItem(BigInteger $item)
{
$this->items()->sync($item);
}
public function addItems(array $items) {
$this->items()->sync($items);
}
public function removeItem(BigInteger $item) {
$this->items()->sync($item);
}
public function removeItems(array $items) {
$this->items()->sync($items);
}
public function dropItems() {
$this->items()->detach();
}
}