belongsTo('Order', 'order_id', 'id', [], 'LEFT')->setEagerlyType(0); } /** * 关联用户 * @return \think\model\relation\BelongsTo */ public function user() { return $this->belongsTo('User', 'user_id', 'id', [], 'LEFT')->setEagerlyType(0); } /** * 关联档案 * @return \think\model\relation\BelongsTo */ public function profile() { return $this->belongsTo('BodyProfile', 'profile_id', 'id', [], 'LEFT')->setEagerlyType(0); } /** * 获取体型选择文本 * @param $value * @param $data * @return string */ public function getBodyTypesTextAttr($value, $data) { if (empty($data['body_types'])) { return ''; } $bodyTypes = json_decode($data['body_types'], true); if (!is_array($bodyTypes)) { return ''; } $texts = []; foreach ($bodyTypes as $type) { if (isset($type['name'])) { $texts[] = $type['name']; } } return implode(', ', $texts); } /** * 获取BMI等级文本 * @param $value * @param $data * @return string */ public function getBmiLevelTextAttr($value, $data) { $levels = [ 'underweight' => '偏瘦', 'normal' => '正常', 'overweight' => '偏胖', 'obese' => '肥胖' ]; return isset($levels[$data['bmi_level']]) ? $levels[$data['bmi_level']] : ''; } /** * 获取性别文本 * @param $value * @param $data * @return string */ public function getGenderTextAttr($value, $data) { $genders = [ 0 => '未知', 1 => '男', 2 => '女' ]; return isset($genders[$data['gender']]) ? $genders[$data['gender']] : '未知'; } /** * 获取关系文本 * @param $value * @param $data * @return string */ public function getRelationTextAttr($value, $data) { $relations = [ 'own' => '本人', 'family' => '家人', 'friend' => '朋友' ]; return isset($relations[$data['relation']]) ? $relations[$data['relation']] : ''; } /** * 身体照片获取器 * @param $value * @param $data * @return array */ public function getBodyPhotosAttr($value, $data) { if (empty($value)) { return []; } $photos = json_decode($value, true); return is_array($photos) ? $photos : []; } /** * 身体照片修改器 * @param $value * @param $data * @return string */ public function setBodyPhotosAttr($value, $data) { return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; } /** * 体型选择获取器 * @param $value * @param $data * @return array */ public function getBodyTypesAttr($value, $data) { if (empty($value)) { return []; } $types = json_decode($value, true); return is_array($types) ? $types : []; } /** * 体型选择修改器 * @param $value * @param $data * @return string */ public function setBodyTypesAttr($value, $data) { return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; } /** * AI报告内容获取器 * @param $value * @param $data * @return array */ public function getAiReportContentAttr($value, $data) { if (empty($value)) { return []; } $content = json_decode($value, true); return is_array($content) ? $content : []; } /** * AI报告内容修改器 * @param $value * @param $data * @return string */ public function setAiReportContentAttr($value, $data) { return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value; } /** * 根据订单ID获取档案详情 * @param int $orderId * @return OrderProfile|null */ public static function getByOrderId($orderId) { return self::where('order_id', $orderId)->find(); } /** * 根据订单号获取档案详情 * @param string $orderSn * @return OrderProfile|null */ public static function getByOrderSn($orderSn) { return self::where('order_sn', $orderSn)->find(); } }