【问题标题】:Junction table in yii phpyii php中的连接表
【发布时间】:2018-07-12 20:48:30
【问题描述】:

我想创建一个联结表tbl_guid_cost_centre,无需我手动将其保存到数据库即可得到处理。我尝试将此添加到我的关系中:

'costCentre' => [
            self::HAS_ONE,
            'CostCentre',
            'guid_to',
            'foreignKey' => 'guid',
            'tbl_guid_cost_centre(guid_to, cost_center_id)',
            "order" => "id desc"],

这样我在保存 costCentre 时会在我的 tbl_guid_cost_centre 中为其创建一行。但是我得到了错误:

未定义属性“CHasOneRelation.0”。

有什么建议吗?

【问题讨论】:

    标签: php yii junction-table


    【解决方案1】:

    您可以在关系中使用关键字through 来创建连接表:

    public function relations() {
            'guidCostCentre' => [
                self::HAS_ONE,
                'GuidCostCentre',
                ['guid_to' => 'guid']
            ],
            'costCentre' => [
                self::HAS_ONE,
                'CostCentre',
                'cost_centre_id',
                'through' => 'guidCostCentre'
            ]
        }
    

    【讨论】:

      【解决方案2】:

      您以错误的方式定义 HAS_ONE 关系。关系配置数组的前三个元素应该是:关系类型、相关模型名称和外键定义。所有其他元素都应由与关系属性相关的键索引。 'tbl_guid_cost_centre(guid_to, cost_center_id)', 可能会产生这个错误,因为它没有键,所以它被当作0 属性的值。你没有分享任何细节,所以很难猜出你想要实现什么,但你应该从这样的事情开始:

      'costCentre' => [
          self::HAS_ONE,
          'CostCentre',
          'guid_to',
          'order' => 'id desc',
      ],
      

      并使用正确的键在数组末尾添加其他设置。

      您可以在文档中找到一些示例和说明:https://www.yiiframework.com/doc/guide/1.1/en/database.arr#declaring-relationship

      【讨论】:

      • 有人可以解释为什么它被否决¯\(°_o)/¯
      • @MuhammadOmerAslam 问题是实现联结表而不是 HAS_ONE 关系。
      • @NickyMirfallah 如果您不想“有一个关系”,那么为什么要在关系定义中使用self::HAS_ONE
      • @rob006 你可以看看我的回答。同样,问题是在 HAS_ONE 关系上实现联结表。
      猜你喜欢
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      相关资源
      最近更新 更多