1

我一直在用这个 ORM 错误敲我的脑袋:Fuel\Core\FuelException [错误]:模型 Model_CustomValue 上的主键无法更改。

以下是我遇到问题的模型的相关信息:

 <?php
use Orm\Model;

class Model_Purchase extends Model
{
    protected static $_has_many = array(
        'customvalues' => array(
            'model_to' => 'Model_CustomValue',
            'key_to' => 'purchase_id',
            'cascade_delete' => true,
        )
    );

    protected static $_properties = array(
        'id',
        'customer_id',
        'payment_id',
        'audit_id',
        'created_at',
        'updated_at',
    );


<?php
use Orm\Model;

class Model_CustomValue extends Model
{
    protected static $_table_name = 'customvalues';
    protected static $_primary_key = array('purchase_id', 'customfield_id');

    protected static $_belongs_to = array(
        'purchase' => array(
            'key_from' => 'purchase_id',
            'model_to' => 'Model_Purchase',
            'key_to' => 'id',
        ),
    );

当尝试将带有 Model_CustomValue 对象数组的 Model_Purchase 保存为 $purchase 对象上名为“customvalues”的属性时,我得到“无法更改模型 Model_CustomValue 上的主键”。

我尝试在 Model_CustomValue 的“belongs_to”中交换 key_from/to,但无济于事。

我正在使用 Fuel 1.6(哈希:6e6d764)

如果更多信息有帮助,请告诉我,我会提供。

4

1 回答 1

2

FuelPHP 论坛主题中,Harro 回答:

您不能有一个同时是 FK 和 PK 的列。您在 Model_CustomValue 上拥有的。

这样做的原因是,当您断开关系时,FK 将设置为 NULL,这在 PK 中不应该发生。

然后我澄清说,对于我们这些可能需要原始示例中的特定示例的人,我确认了以下内容:

因此,只需重新说明为什么不允许这样做:

Model_CustomValue 使用“purchase_id”作为其 PK 的一部分以及 Model_Purchase 的 FK。如果要取消链接这两个模型,这将导致 Model_CustomValue 的 PK 部分为空——这显然是不允许的。

于 2013-08-23T21:53:28.580 回答