FuelPHP在尝试插入相关模型的外键上获取“非空违规”

时间:2013-08-28 03:55:52

标签: php orm fuelphp

我正在尝试插入具有多级HasMany关系的模型表。这是到目前为止的细分

客户 - >(的hasMany) - >委员─>(的hasMany) - >收入

但是,在尝试插入Incomes表时,我得到一个“非null违规”,其中来自Members表的外键未被带到Incomes。我知道最常见的问题是搞砸$ _has_many和$ _belongs_to属性,但据我所知,它们没问题。另外,只需插入到会员表中就可以正常工作,所以我至少知道第一层它正在工作!我唯一能想到的是,如果因为它是第二级,那就是因此而搞砸了。这是我的代码:

Relation Link(会员)

protected static $_has_many = array(
    'incomes' => array(
        'key_from' => 'id',
        'model_to' => 'Model_Income',
        'key_to' => 'member_id',
        'cascade_save' => true,
        'cascade_delete' => true,
    ),
);

关系链接(收入)

protected static $_belongs_to = array(
    'member' => array(
        'key_from' => 'member_id',
        'model_to' => 'Model_Member',
        'key_to' => 'id',
        'cascade_save' => true,
        'cascade_delete' => true,
    ),
);

控制器代码

// code to set up $customer
$customer->members[] = Model_Member::forge();
// set $member_vals here
$customer->members[0]->set($member_vals);
$customer->members[0]->incomes[] = Model_Income::forge();
// set $income_vals here
$customer->members[0]->incomes[0]->set($income_vals);
$customer->save();

1 个答案:

答案 0 :(得分:0)

首先想到的问题是,您要在 - >成员 - >收入(复数)上设置关系,而不是 - >会员 - >收入(单数)。

我也更喜欢分开做关系,而不是像你一样把它们链接起来。因此,如果您在向客户添加新成员或向成员添加新成员时已经设置了关系,我的猜测是指数不会为0.

如果您尝试以下内容会怎样:

$member = Model_Member::forge($member_vals);
$income = Model_Income::forge($income_vals);

$member->income[] = $income;
$customer->member[] = $member;

$customer->save();

有效吗?

不同的建议:

由于您似乎遵循表/列命名约定,因此请尝试以下操作:

// Model_Member
protected static $_has_many = array(
    'incomes'
);

// Model_Income
protected static $_belongs_to = array(
    'members' // plural, not singular like you seem to have
);

如果您需要更多帮助,您一定要展示如何拥有会员/收入模型和表格。