Files
sam-api/LOGICAL_RELATIONSHIPS.md
hskwon 8686b199ee feat: 더미 데이터 시더 추가 및 회계 관련 마이그레이션
- DummyDataSeeder 및 개별 시더 추가 (Client, BadDebt, Deposit 등)
- payments.paid_at nullable 마이그레이션
- subscriptions 취소 컬럼 추가
- clients 테이블 bad_debt 컬럼 제거
- PlanController, ClientService 수정
- 불필요한 claudedocs, flow-test 파일 정리
2025-12-24 08:54:52 +09:00

681 lines
17 KiB
Markdown

# 논리적 데이터베이스 관계 문서
> **자동 생성**: 2025-12-23 22:25:44
> **소스**: Eloquent 모델 관계 분석
## 📊 모델별 관계 현황
### bad_debts
**모델**: `App\Models\BadDebts\BadDebt`
- **client()**: belongsTo → `clients`
- **assignedUser()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **documents()**: hasMany → `bad_debt_documents`
- **memos()**: hasMany → `bad_debt_memos`
### bad_debt_documents
**모델**: `App\Models\BadDebts\BadDebtDocument`
- **badDebt()**: belongsTo → `bad_debts`
- **file()**: belongsTo → `files`
### bad_debt_memos
**모델**: `App\Models\BadDebts\BadDebtMemo`
- **badDebt()**: belongsTo → `bad_debts`
- **creator()**: belongsTo → `users`
### boards
**모델**: `App\Models\Boards\Board`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
- **customFields()**: hasMany → `board_settings`
- **posts()**: hasMany → `posts`
### board_comments
**모델**: `App\Models\Boards\BoardComment`
- **post()**: belongsTo → `posts`
- **user()**: belongsTo → `users`
- **parent()**: belongsTo → `board_comments`
- **children()**: hasMany → `board_comments`
### board_settings
**모델**: `App\Models\Boards\BoardSetting`
- **board()**: belongsTo → `boards`
### posts
**모델**: `App\Models\Boards\Post`
- **board()**: belongsTo → `boards`
- **comments()**: hasMany → `board_comments`
- **files()**: morphMany → `files`
### post_custom_field_values
**모델**: `App\Models\Boards\PostCustomFieldValue`
- **post()**: belongsTo → `posts`
- **field()**: belongsTo → `board_settings`
### categorys
**모델**: `App\Models\Commons\Category`
- **parent()**: belongsTo → `categories`
- **children()**: hasMany → `categories`
- **categoryFields()**: hasMany → `category_fields`
### category_fields
**모델**: `App\Models\Commons\CategoryField`
- **category()**: belongsTo → `categories`
### category_logs
**모델**: `App\Models\Commons\CategoryLog`
- **category()**: belongsTo → `categories`
### category_templates
**모델**: `App\Models\Commons\CategoryTemplate`
- **category()**: belongsTo → `categories`
### files
**모델**: `App\Models\Commons\File`
- **tenant()**: belongsTo → `tenants`
- **folder()**: belongsTo → `folders`
- **uploader()**: belongsTo → `users`
- **shareLinks()**: hasMany → `file_share_links`
- **fileable()**: morphTo → `(Polymorphic)`
### global_menus
**모델**: `App\Models\Commons\GlobalMenu`
- **parent()**: belongsTo → `global_menus`
- **children()**: hasMany → `global_menus`
- **tenantMenus()**: hasMany → `menus`
### menus
**모델**: `App\Models\Commons\Menu`
- **parent()**: belongsTo → `menus`
- **globalMenu()**: belongsTo → `global_menus`
- **children()**: hasMany → `menus`
### tags
**모델**: `App\Models\Commons\Tag`
- **tenant()**: belongsTo → `tenants`
### company_requests
**모델**: `App\Models\CompanyRequest`
- **user()**: belongsTo → `users`
- **approver()**: belongsTo → `users`
- **createdTenant()**: belongsTo → `tenants`
### bom_templates
**모델**: `App\Models\Design\BomTemplate`
- **modelVersion()**: belongsTo → `model_versions`
- **items()**: hasMany → `bom_template_items`
### bom_template_items
**모델**: `App\Models\Design\BomTemplateItem`
- **template()**: belongsTo → `bom_templates`
### design_models
**모델**: `App\Models\Design\DesignModel`
- **versions()**: hasMany → `model_versions`
### model_versions
**모델**: `App\Models\Design\ModelVersion`
- **model()**: belongsTo → `models`
- **bomTemplates()**: hasMany → `bom_templates`
### estimates
**모델**: `App\Models\Estimate\Estimate`
- **modelSet()**: belongsTo → `categories`
- **items()**: hasMany → `estimate_items`
### estimate_items
**모델**: `App\Models\Estimate\EstimateItem`
- **estimate()**: belongsTo → `estimates`
### fcm_send_logs
**모델**: `App\Models\FcmSendLog`
### file_share_links
**모델**: `App\Models\FileShareLink`
- **file()**: belongsTo → `files`
- **tenant()**: belongsTo → `tenants`
### folders
**모델**: `App\Models\Folder`
### custom_tabs
**모델**: `App\Models\ItemMaster\CustomTab`
- **columnSetting()**: hasOne → `tab_columns`
### entity_relationships
**모델**: `App\Models\ItemMaster\EntityRelationship`
- **parent()**: morphTo → `(Polymorphic)`
- **child()**: morphTo → `(Polymorphic)`
### item_pages
**모델**: `App\Models\ItemMaster\ItemPage`
- **sectionRelationships()**: hasMany → `entity_relationships`
- **fieldRelationships()**: hasMany → `entity_relationships`
- **allRelationships()**: hasMany → `entity_relationships`
### item_sections
**모델**: `App\Models\ItemMaster\ItemSection`
- **fieldRelationships()**: hasMany → `entity_relationships`
- **bomRelationships()**: hasMany → `entity_relationships`
- **allChildRelationships()**: hasMany → `entity_relationships`
### tab_columns
**모델**: `App\Models\ItemMaster\TabColumn`
- **tab()**: belongsTo → `custom_tabs`
### items
**모델**: `App\Models\Items\Item`
- **category()**: belongsTo → `categories`
- **files()**: hasMany → `files`
- **details()**: hasOne → `item_details`
### item_details
**모델**: `App\Models\Items\ItemDetail`
- **item()**: belongsTo → `items`
### login_tokens
**모델**: `App\Models\LoginToken`
- **user()**: belongsTo → `users`
### main_requests
**모델**: `App\Models\MainRequest`
- **flows()**: hasMany → `main_request_flows`
### main_request_flows
**모델**: `App\Models\MainRequestFlow`
- **mainRequest()**: belongsTo → `main_requests`
- **flowable()**: morphTo → `(Polymorphic)`
### material_inspections
**모델**: `App\Models\Materials\MaterialInspection`
- **receipt()**: belongsTo → `material_receipts`
- **items()**: hasMany → `material_inspection_items`
### material_inspection_items
**모델**: `App\Models\Materials\MaterialInspectionItem`
- **inspection()**: belongsTo → `material_inspections`
### material_receipts
**모델**: `App\Models\Materials\MaterialReceipt`
- **item()**: belongsTo → `items`
- **inspections()**: hasMany → `material_inspections`
### users
**모델**: `App\Models\Members\User`
- **userTenants()**: hasMany → `user_tenants`
- **userRoles()**: hasMany → `user_roles`
- **userTenant()**: hasOne → `user_tenants`
- **userTenantById()**: hasOne → `user_tenants`
- **tenantsMembership()**: belongsToMany → `tenants`
- **files()**: morphMany → `files`
### user_menu_permissions
**모델**: `App\Models\Members\UserMenuPermission`
- **user()**: belongsTo → `users`
- **menu()**: belongsTo → `menus`
### user_roles
**모델**: `App\Models\Members\UserRole`
- **user()**: belongsTo → `users`
- **tenant()**: belongsTo → `tenants`
- **role()**: belongsTo → `roles`
### user_tenants
**모델**: `App\Models\Members\UserTenant`
- **user()**: belongsTo → `users`
- **tenant()**: belongsTo → `tenants`
### notification_settings
**모델**: `App\Models\NotificationSetting`
### notification_setting_groups
**모델**: `App\Models\NotificationSettingGroup`
- **items()**: hasMany → `notification_setting_group_items`
### notification_setting_group_items
**모델**: `App\Models\NotificationSettingGroupItem`
- **group()**: belongsTo → `notification_setting_groups`
### notification_setting_group_states
**모델**: `App\Models\NotificationSettingGroupState`
### clients
**모델**: `App\Models\Orders\Client`
- **clientGroup()**: belongsTo → `client_groups`
- **orders()**: hasMany → `orders`
- **badDebts()**: hasMany → `bad_debts`
- **activeBadDebts()**: hasMany → `bad_debts`
### client_groups
**모델**: `App\Models\Orders\ClientGroup`
- **clients()**: hasMany → `clients`
### orders
**모델**: `App\Models\Orders\Order`
- **item()**: belongsTo → `items`
- **items()**: hasMany → `order_items`
- **histories()**: hasMany → `order_histories`
- **versions()**: hasMany → `order_versions`
### order_historys
**모델**: `App\Models\Orders\OrderHistory`
- **order()**: belongsTo → `orders`
### order_items
**모델**: `App\Models\Orders\OrderItem`
- **order()**: belongsTo → `orders`
- **item()**: belongsTo → `items`
- **components()**: hasMany → `order_item_components`
### order_item_components
**모델**: `App\Models\Orders\OrderItemComponent`
- **orderItem()**: belongsTo → `order_items`
### order_versions
**모델**: `App\Models\Orders\OrderVersion`
- **order()**: belongsTo → `orders`
### permissions
**모델**: `App\Models\Permissions\Permission`
- **tenant()**: belongsTo → `tenants`
### permission_overrides
**모델**: `App\Models\Permissions\PermissionOverride`
- **permission()**: belongsTo → `permissions`
### roles
**모델**: `App\Models\Permissions\Role`
- **tenant()**: belongsTo → `tenants`
- **menuPermissions()**: hasMany → `role_menu_permissions`
- **userRoles()**: hasMany → `user_roles`
### role_menu_permissions
**모델**: `App\Models\Permissions\RoleMenuPermission`
- **role()**: belongsTo → `roles`
- **menu()**: belongsTo → `menus`
### popups
**모델**: `App\Models\Popups\Popup`
- **department()**: belongsTo → `departments`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### prices
**모델**: `App\Models\Products\Price`
- **clientGroup()**: belongsTo → `client_groups`
- **revisions()**: hasMany → `price_revisions`
### price_revisions
**모델**: `App\Models\Products\PriceRevision`
- **price()**: belongsTo → `prices`
### push_device_tokens
**모델**: `App\Models\PushDeviceToken`
### push_notification_settings
**모델**: `App\Models\PushNotificationSetting`
### lots
**모델**: `App\Models\Qualitys\Lot`
- **item()**: belongsTo → `items`
- **sales()**: hasMany → `lot_sales`
### lot_sales
**모델**: `App\Models\Qualitys\LotSale`
- **lot()**: belongsTo → `lots`
### quotes
**모델**: `App\Models\Quote\Quote`
- **client()**: belongsTo → `clients`
- **item()**: belongsTo → `items`
- **finalizer()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
- **items()**: hasMany → `quote_items`
- **revisions()**: hasMany → `quote_revisions`
### quote_formulas
**모델**: `App\Models\Quote\QuoteFormula`
- **category()**: belongsTo → `quote_formula_categories`
- **ranges()**: hasMany → `quote_formula_ranges`
- **mappings()**: hasMany → `quote_formula_mappings`
- **items()**: hasMany → `quote_formula_items`
### quote_formula_categorys
**모델**: `App\Models\Quote\QuoteFormulaCategory`
- **formulas()**: hasMany → `quote_formulas`
### quote_formula_items
**모델**: `App\Models\Quote\QuoteFormulaItem`
- **formula()**: belongsTo → `quote_formulas`
### quote_formula_mappings
**모델**: `App\Models\Quote\QuoteFormulaMapping`
- **formula()**: belongsTo → `quote_formulas`
### quote_formula_ranges
**모델**: `App\Models\Quote\QuoteFormulaRange`
- **formula()**: belongsTo → `quote_formulas`
### quote_items
**모델**: `App\Models\Quote\QuoteItem`
- **quote()**: belongsTo → `quotes`
### quote_revisions
**모델**: `App\Models\Quote\QuoteRevision`
- **quote()**: belongsTo → `quotes`
- **reviser()**: belongsTo → `users`
### ai_reports
**모델**: `App\Models\Tenants\AiReport`
- **creator()**: belongsTo → `users`
### approvals
**모델**: `App\Models\Tenants\Approval`
- **form()**: belongsTo → `approval_forms`
- **drafter()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
- **steps()**: hasMany → `approval_steps`
- **approverSteps()**: hasMany → `approval_steps`
- **referenceSteps()**: hasMany → `approval_steps`
### approval_forms
**모델**: `App\Models\Tenants\ApprovalForm`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
- **approvals()**: hasMany → `approvals`
### approval_lines
**모델**: `App\Models\Tenants\ApprovalLine`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### approval_steps
**모델**: `App\Models\Tenants\ApprovalStep`
- **approval()**: belongsTo → `approvals`
- **approver()**: belongsTo → `users`
### attendances
**모델**: `App\Models\Tenants\Attendance`
- **user()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### bank_accounts
**모델**: `App\Models\Tenants\BankAccount`
- **assignedUser()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### barobill_settings
**모델**: `App\Models\Tenants\BarobillSetting`
- **tenant()**: belongsTo → `tenants`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### bills
**모델**: `App\Models\Tenants\Bill`
- **client()**: belongsTo → `clients`
- **bankAccount()**: belongsTo → `bank_accounts`
- **creator()**: belongsTo → `users`
- **installments()**: hasMany → `bill_installments`
### bill_installments
**모델**: `App\Models\Tenants\BillInstallment`
- **bill()**: belongsTo → `bills`
- **creator()**: belongsTo → `users`
### cards
**모델**: `App\Models\Tenants\Card`
- **assignedUser()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### data_exports
**모델**: `App\Models\Tenants\DataExport`
- **tenant()**: belongsTo → `tenants`
- **creator()**: belongsTo → `users`
### departments
**모델**: `App\Models\Tenants\Department`
- **parent()**: belongsTo → `departments`
- **children()**: hasMany → `departments`
- **departmentUsers()**: hasMany → `department_user`
- **users()**: belongsToMany → `users`
- **permissionOverrides()**: morphMany → `permission_overrides`
### deposits
**모델**: `App\Models\Tenants\Deposit`
- **client()**: belongsTo → `clients`
- **bankAccount()**: belongsTo → `bank_accounts`
- **creator()**: belongsTo → `users`
### leaves
**모델**: `App\Models\Tenants\Leave`
- **user()**: belongsTo → `users`
- **approver()**: belongsTo → `users`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### leave_balances
**모델**: `App\Models\Tenants\LeaveBalance`
- **user()**: belongsTo → `users`
### loans
**모델**: `App\Models\Tenants\Loan`
- **withdrawal()**: belongsTo → `withdrawals`
### payments
**모델**: `App\Models\Tenants\Payment`
- **subscription()**: belongsTo → `subscriptions`
### payrolls
**모델**: `App\Models\Tenants\Payroll`
- **user()**: belongsTo → `users`
- **confirmer()**: belongsTo → `users`
- **withdrawal()**: belongsTo → `withdrawals`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### payroll_settings
**모델**: `App\Models\Tenants\PayrollSetting`
- **tenant()**: belongsTo → `tenants`
### department_users
**모델**: `App\Models\Tenants\Pivots\DepartmentUser`
- **department()**: belongsTo → `departments`
- **user()**: belongsTo → `users`
### plans
**모델**: `App\Models\Tenants\Plan`
- **subscriptions()**: hasMany → `subscriptions`
### purchases
**모델**: `App\Models\Tenants\Purchase`
- **client()**: belongsTo → `clients`
- **withdrawal()**: belongsTo → `withdrawals`
- **creator()**: belongsTo → `users`
### sales
**모델**: `App\Models\Tenants\Sale`
- **client()**: belongsTo → `clients`
- **deposit()**: belongsTo → `deposits`
- **creator()**: belongsTo → `users`
### setting_field_defs
**모델**: `App\Models\Tenants\SettingFieldDef`
- **tenantSettings()**: hasMany → `tenant_field_settings`
### sites
**모델**: `App\Models\Tenants\Site`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
### subscriptions
**모델**: `App\Models\Tenants\Subscription`
- **tenant()**: belongsTo → `tenants`
- **plan()**: belongsTo → `plans`
- **payments()**: hasMany → `payments`
### tax_invoices
**모델**: `App\Models\Tenants\TaxInvoice`
- **creator()**: belongsTo → `users`
- **updater()**: belongsTo → `users`
- **reference()**: morphTo → `(Polymorphic)`
### tenants
**모델**: `App\Models\Tenants\Tenant`
- **plan()**: belongsTo → `plans`
- **subscription()**: belongsTo → `subscriptions`
- **userTenants()**: hasMany → `user_tenants`
- **roles()**: hasMany → `roles`
- **userRoles()**: hasMany → `user_roles`
- **users()**: belongsToMany → `users`
- **files()**: morphMany → `files`
### tenant_field_settings
**모델**: `App\Models\Tenants\TenantFieldSetting`
- **fieldDef()**: belongsTo → `setting_field_defs`
- **optionGroup()**: belongsTo → `tenant_option_groups`
### tenant_option_groups
**모델**: `App\Models\Tenants\TenantOptionGroup`
- **values()**: hasMany → `tenant_option_values`
### tenant_option_values
**모델**: `App\Models\Tenants\TenantOptionValue`
- **group()**: belongsTo → `tenant_option_groups`
### tenant_stat_fields
**모델**: `App\Models\Tenants\TenantStatField`
- **tenant()**: belongsTo → `tenants`
### tenant_user_profiles
**모델**: `App\Models\Tenants\TenantUserProfile`
- **user()**: belongsTo → `users`
- **department()**: belongsTo → `departments`
- **manager()**: belongsTo → `users`
### withdrawals
**모델**: `App\Models\Tenants\Withdrawal`
- **client()**: belongsTo → `clients`
- **bankAccount()**: belongsTo → `bank_accounts`
- **creator()**: belongsTo → `users`
### user_invitations
**모델**: `App\Models\UserInvitation`
- **tenant()**: belongsTo → `tenants`
- **role()**: belongsTo → `roles`
- **inviter()**: belongsTo → `users`