70 lines
1.7 KiB
PHP
70 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Repositories;
|
|
|
|
use App\Models\PackagingItem;
|
|
|
|
class PackagingItemRepository
|
|
{
|
|
/**
|
|
* @param array<string, mixed> $data
|
|
*/
|
|
public function create(array $data): PackagingItem
|
|
{
|
|
$attrs = $this->extractAttributes($data);
|
|
\DB::enableQueryLog();
|
|
|
|
try {
|
|
$item = PackagingItem::create($attrs);
|
|
} catch (\Throwable $e) {
|
|
$queries = \DB::getQueryLog();
|
|
$lastQ = end($queries);
|
|
\Log::error('PackagingItem CREATE FAILED', [
|
|
'error' => $e->getMessage(),
|
|
'sql' => $lastQ['query'] ?? 'unknown',
|
|
'bindings' => $lastQ['bindings'] ?? [],
|
|
'binding_types' => array_map(fn($v) => gettype($v) . ':' . json_encode($v), $lastQ['bindings'] ?? []),
|
|
'attributes_passed' => $attrs,
|
|
]);
|
|
|
|
throw $e;
|
|
}
|
|
|
|
\DB::disableQueryLog();
|
|
|
|
return $item;
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $data
|
|
*/
|
|
public function update(PackagingItem $packagingItem, array $data): PackagingItem
|
|
{
|
|
$packagingItem->update($this->extractAttributes($data));
|
|
|
|
return $packagingItem->fresh();
|
|
}
|
|
|
|
/**
|
|
* @param array<string, mixed> $data
|
|
* @return array<string, mixed>
|
|
*/
|
|
protected function extractAttributes(array $data): array
|
|
{
|
|
$attrs = collect($data)->only([
|
|
'packaging_material_id',
|
|
'supplier_id',
|
|
'name',
|
|
'category',
|
|
'weight_grams',
|
|
'min_stock_alert',
|
|
'url',
|
|
'product_id',
|
|
'active',
|
|
])->all();
|
|
|
|
$attrs['weight_grams'] = $attrs['weight_grams'] ?? 0;
|
|
|
|
return $attrs;
|
|
}
|
|
}
|