153 lines
4.3 KiB
PHP
153 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* AttributeRepo.php
|
|
*
|
|
* @copyright 2023 beikeshop.com - All Rights Reserved
|
|
* @link https://beikeshop.com
|
|
* @author TL <mengwb@guangda.work>
|
|
* @created 2023-01-04 19:45:41
|
|
* @modified 2023-01-04 19:45:41
|
|
*/
|
|
|
|
namespace Beike\Admin\Repositories;
|
|
|
|
use Beike\Models\Attribute;
|
|
use Beike\Models\AttributeDescription;
|
|
use Beike\Models\AttributeValue;
|
|
use Beike\Models\ProductAttribute;
|
|
|
|
class AttributeRepo
|
|
{
|
|
public static function getList()
|
|
{
|
|
return Attribute::query()->orderByDesc('id')->paginate()->withQueryString();
|
|
}
|
|
|
|
public static function create($data)
|
|
{
|
|
$attribute = Attribute::query()->create([
|
|
'attribute_group_id' => $data['attribute_group_id'],
|
|
'sort_order' => $data['sort_order'],
|
|
]);
|
|
|
|
$descriptions = [];
|
|
foreach ($data['name'] as $locale => $name) {
|
|
$descriptions[] = [
|
|
'locale' => $locale,
|
|
'name' => $name,
|
|
];
|
|
}
|
|
$attribute->descriptions()->createMany($descriptions);
|
|
|
|
return $attribute;
|
|
}
|
|
|
|
public static function update($id, $data)
|
|
{
|
|
$attribute = Attribute::query()->updateOrCreate(['id' => $id], [
|
|
'attribute_group_id' => $data['attribute_group_id'],
|
|
'sort_order' => $data['sort_order'],
|
|
]);
|
|
|
|
$descriptions = [];
|
|
foreach ($data['name'] as $locale => $name) {
|
|
$descriptions[] = [
|
|
'locale' => $locale,
|
|
'name' => $name,
|
|
];
|
|
}
|
|
$attribute->descriptions()->delete();
|
|
$attribute->descriptions()->createMany($descriptions);
|
|
|
|
return $attribute;
|
|
}
|
|
|
|
public static function createValue($data)
|
|
{
|
|
$attributeValue = AttributeValue::query()->create([
|
|
'attribute_id' => $data['attribute_id'],
|
|
]);
|
|
|
|
$descriptions = [];
|
|
foreach ($data['name'] as $locale => $name) {
|
|
$descriptions[] = [
|
|
'locale' => $locale,
|
|
'name' => $name,
|
|
];
|
|
}
|
|
$attributeValue->descriptions()->createMany($descriptions);
|
|
|
|
return $attributeValue;
|
|
}
|
|
|
|
public static function updateValue($id, $data)
|
|
{
|
|
$attributeValue = AttributeValue::query()->findOrFail($id);
|
|
|
|
$descriptions = [];
|
|
foreach ($data['name'] as $locale => $name) {
|
|
$descriptions[] = [
|
|
'locale' => $locale,
|
|
'name' => $name,
|
|
];
|
|
}
|
|
$attributeValue->descriptions()->delete();
|
|
$attributeValue->descriptions()->createMany($descriptions);
|
|
|
|
return $attributeValue;
|
|
}
|
|
|
|
public static function deleteValue($id)
|
|
{
|
|
AttributeValue::query()->findOrFail($id)->delete();
|
|
}
|
|
|
|
public static function find($id)
|
|
{
|
|
return Attribute::query()->with('values.descriptions')->find($id);
|
|
}
|
|
|
|
public static function delete($id)
|
|
{
|
|
$productIds = ProductAttribute::query()->where('attribute_id', $id)->pluck('product_id')->toArray();
|
|
if ($productIds) {
|
|
throw new \Exception(trans('admin/attribute.error_cannot_delete_product_used', ['product_ids' => implode(', ', $productIds)]));
|
|
}
|
|
$attribute = Attribute::query()->findOrFail($id);
|
|
$attribute->descriptions()->delete();
|
|
$attribute->values()->delete();
|
|
$attribute->delete();
|
|
}
|
|
|
|
public static function autocomplete($name)
|
|
{
|
|
$builder = Attribute::query()->with('description')
|
|
->whereHas('description', function ($query) use ($name) {
|
|
$query->where('name', 'like', "{$name}%");
|
|
});
|
|
|
|
return $builder->limit(10)->get();
|
|
}
|
|
|
|
public static function autocompleteValue($attributeId, $name)
|
|
{
|
|
$builder = AttributeValue::query()->with('description')
|
|
->where('attribute_id', $attributeId)
|
|
->whereHas('description', function ($query) use ($name) {
|
|
$query->where('name', 'like', "{$name}%");
|
|
});
|
|
|
|
return $builder->limit(10)->get();
|
|
}
|
|
|
|
public static function getByIds($ids)
|
|
{
|
|
return AttributeDescription::query()
|
|
->where('locale', locale())
|
|
->whereIn('attribute_id', $ids)
|
|
->select(['attribute_id as id', 'name'])
|
|
->get()
|
|
->toArray();
|
|
}
|
|
}
|