ScriptRecord.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. class ScriptRecord extends Model
  6. {
  7. use HasFactory;
  8. protected $table = 'mp_script_records';
  9. protected $fillable = [
  10. 'uid',
  11. 'script_id',
  12. 'sequence',
  13. 'role',
  14. 'content',
  15. ];
  16. /**
  17. * 角色常量
  18. */
  19. const ROLE_USER = 'user';
  20. const ROLE_ASSISTANT = 'assistant';
  21. /**
  22. * 批量插入对话记录
  23. *
  24. * @param int $uid 用户ID
  25. * @param int $scriptId 剧本ID
  26. * @param int $sequence 剧集序号
  27. * @param array $messages 消息数组
  28. * @return bool
  29. */
  30. public static function batchInsertRecords($uid, $scriptId, $sequence, $messages)
  31. {
  32. $records = [];
  33. $now = now();
  34. foreach ($messages as $message) {
  35. if (!isset($message['role']) || !isset($message['content'])) {
  36. continue;
  37. }
  38. // 只处理 user 和 assistant 角色
  39. if (!in_array($message['role'], [self::ROLE_USER, self::ROLE_ASSISTANT])) {
  40. continue;
  41. }
  42. $records[] = [
  43. 'uid' => $uid,
  44. 'script_id' => $scriptId,
  45. 'sequence' => $sequence,
  46. 'role' => $message['role'],
  47. 'content' => is_array($message['content']) ? json_encode($message['content'], JSON_UNESCAPED_UNICODE) : $message['content'],
  48. 'created_at' => $now,
  49. 'updated_at' => $now,
  50. ];
  51. }
  52. if (empty($records)) {
  53. return false;
  54. }
  55. return self::insert($records);
  56. }
  57. }