You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

October CMS下Quote、Status、Event模型关联关系设置方法咨询

October CMS 多模型(Quote/Status/Event)一对多关联配置方案

1. 前置数据库字段要求

先在quotes表中添加两个外键字段:

  • status_id:整数类型,关联statuses表的主键id
  • event_id:整数类型,关联events表的主键id

2. 各模型关联代码配置

以下代码中你的插件命名空间请替换为实际插件的命名空间,例如Acme\QuoteManager\Models。

2.1 Quote 模型(从属侧)

Quote 属于1个Status和1个Event,使用$belongsTo属性定义关联:

<?php namespace 你的插件命名空间\Models;

use Model;

class Quote extends Model
{
    // 可填充字段可根据业务自行调整
    public $fillable = ['title', 'content', 'status_id', 'event_id'];

    // 定义关联关系
    public $belongsTo = [
        'status' => \你的插件命名空间\Models\Status::class,
        'event' => \你的插件命名空间\Models\Event::class,
    ];
}

2.2 Status 模型(一对多的主侧)

Status可对应多个Quote,使用$hasMany属性定义关联:

<?php namespace 你的插件命名空间\Models;

use Model;

class Status extends Model
{
    public $fillable = ['name']; // 存储状态名称,例如Active、Inactive、Draft

    // 关联多个Quote
    public $hasMany = [
        'quotes' => \你的插件命名空间\Models\Quote::class,
    ];
}

2.3 Event 模型(一对多的主侧)

Event可对应多个Quote,关联规则和Status一致:

<?php namespace 你的插件命名空间\Models;

use Model;

class Event extends Model
{
    public $fillable = ['name', 'hold_date']; // 存储活动名称、举办日期等,例如Golf、Charity Dinner

    // 关联多个Quote
    public $hasMany = [
        'quotes' => \你的插件命名空间\Models\Quote::class,
    ];
}

3. 实际场景使用示例

对应需求:新建Quote时选择状态为「Active」、关联活动为「Golf」。

3.1 提前准备基础数据

先在对应表中创建基础配置项:

  • Status表插入1条记录:name = 'Active',主键id假设为1
  • Event表插入1条记录:name = 'Golf',主键id假设为2

3.2 代码层面创建关联Quote

// 获取要关联的状态和活动实例
$activeStatus = \你的插件命名空间\Models\Status::where('name', 'Active')->first();
$golfEvent = \你的插件命名空间\Models\Event::where('name', 'Golf')->first();

// 新建Quote并绑定关联
$newQuote = new \你的插件命名空间\Models\Quote();
$newQuote->title = '高尔夫活动报价单001';
$newQuote->content = '包含场地租赁、1名教练服务、20人茶歇,总价6800元';
// 两种关联赋值方式二选一即可
// 方式1:直接赋值外键
$newQuote->status_id = $activeStatus->id;
$newQuote->event_id = $golfEvent->id;
// 方式2:通过关联属性赋值
// $newQuote->status = $activeStatus;
// $newQuote->event = $golfEvent;
$newQuote->save();

3.3 后台表单可视化选择关联项

如果要在October CMS后台新建Quote时通过下拉框选择关联项,只需在Quote模型的fields.yaml配置文件中添加以下字段:

fields:
    title:
        label: 报价单名称
        type: text
    content:
        label: 报价单内容
        type: textarea
    status:
        label: 报价状态
        type: relation
        nameFrom: name # 取Status表的name字段作为下拉选项显示内容
        emptyOption: 请选择状态
    event:
        label: 关联活动
        type: relation
        nameFrom: name # 取Event表的name字段作为下拉选项显示内容
        emptyOption: 请选择活动

配置完成后,后台新建Quote的表单会自动生成两个下拉选择框,可直接选择「Active」状态和「Golf」活动,保存后自动完成关联绑定。


4. 关联数据读取示例

// 读取单条Quote的关联状态和活动
$quote = Quote::find(1);
echo $quote->status->name; // 输出:Active
echo $quote->event->name; // 输出:Golf

// 读取所有状态为Active的Quote
$activeQuotes = Status::where('name', 'Active')->first()->quotes;

// 读取所有关联Golf活动的Quote
$golfQuotes = Event::where('name', 'Golf')->first()->quotes;

内容的提问来源于stack exchange,提问作者Jakef19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:27:00