# 服务层 Trait 模板

## CreateTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 创建数据 Trait
 */
trait CreateTrait
{
    /**
     * 创建记录
     * @param array $data 数据
     * @return mixed
     */
    public function create(array $data)
    {
        return $this->modelClassName::create($data);
    }
}
```

## DeleteTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 删除数据 Trait
 */
trait DeleteTrait
{
    /**
     * 删除记录
     * @param mixed $id 主键ID或ID数组
     */
    public function delete($id): void
    {
        $this->modelClassName::destroy($id);
    }
}
```

## ListsTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 列表数据 Trait（不分页）
 */
trait ListsTrait
{
    /**
     * 获取列表
     * @param array $data 查询条件
     * @return mixed
     */
    public function lists(array $data = [])
    {
        $where = $data['where'] ?? [];
        $order = $data['order'] ?? 'id DESC';
        return $this->modelClassName::where($where)->order($order)->select();
    }
}
```

## PageTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 分页数据 Trait
 */
trait PageTrait
{
    /**
     * 分页列表
     * @param array $data 查询条件
     * @return mixed
     */
    public function page(array $data = [])
    {
        $where = $data['where'] ?? [];
        $order = $data['order'] ?? 'id DESC';
        return $this->modelClassName::where($where)->order($order)->paginate();
    }
}
```

## ReadTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 读取数据 Trait
 */
trait ReadTrait
{
    /**
     * 读取单条记录
     * @param int $id 主键ID
     * @return mixed
     */
    public function read(int $id)
    {
        return $this->modelClassName::findOrFail($id);
    }
}
```

## UpdateTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 更新数据 Trait
 */
trait UpdateTrait
{
    /**
     * 更新记录
     * @param array $data 数据（必须包含主键）
     * @return mixed
     */
    public function update(array $data)
    {
        return $this->modelClassName::update($data);
    }
}
```

## ToggleStatusTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 状态切换 Trait
 */
trait ToggleStatusTrait
{
    /**
     * 切换状态
     * @param array $data 包含 id 和 status
     */
    public function toggleStatus(array $data): void
    {
        $id = $data['id'] ?? 0;
        $status = $data['status'] ?? 0;
        $this->modelClassName::where('id', $id)->update(['status' => $status]);
    }
}
```

## ListOrderTrait.php

```php
<?php
namespace app\{应用名}\service\traits;

/**
 * 排序 Trait
 */
trait ListOrderTrait
{
    /**
     * 批量排序
     * @param array $listOrders 排序数据 [id => order_value]
     */
    public function listOrder(array $listOrders): void
    {
        if (!empty($listOrders)) {
            foreach ($listOrders as $id => $order) {
                $this->modelClassName::where('id', intval($id))
                    ->update(['list_order' => floatval($order)]);
            }
        }
    }
}
```
