我正在尝试插入具有多级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();
答案 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
);
如果您需要更多帮助,您一定要展示如何拥有会员/收入模型和表格。