Cortex hasMany 未在 m2m 中创建条目 table
Cortex hasMany not creating entries in m2m table
嗨,我无法让 Cortex hasMany 与 hasMany 关系正常工作,所以我做了一个简单的测试。我在我的模型命名空间
中创建了两个 类、CortexTestA 和 CortexTestB
namespace models;
use DB\Cortex;
class CortexTestA extends Cortex {
protected $fieldConf = array(
'name' => array(
'type' => 'VARCHAR256',
'nullable' => false
),
'cortextestb' => array(
'has-many' => array('models\CortexTestB', 'cortextesta', 'cortextest_a_b')
)
);
// constructor etc. follows
这是 CortexTestB 的字段配置文件:
'cortextesta' => array(
'has-many' => array('models\CortexTestA', 'cortextestb', 'cortextest_a_b')
)
接下来我运行设置命令
\Models\CortexTestA::setup();
\Models\CortexTestB::setup();
但是已经发生了一些事情运行ge,两个table现在都有过时的字段:
CREATE TABLE IF NOT EXISTS `cortextesta` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cortextestb` int(11) DEFAULT NULL
)
CREATE TABLE IF NOT EXISTS `cortextestb` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cortextesta` int(11) DEFAULT NULL
)
虽然 m2m table 确实创建正确:
CREATE TABLE IF NOT EXISTS `cortextest_a_b` (
`id` int(11) NOT NULL,
`cortextesta` int(11) DEFAULT NULL,
`cortextestb` int(11) DEFAULT NULL
)
但是现在当我运行这个
$cta = new \models\CortexTestA();
$cta->name = "SomethingA";
$cta->save();
// Results in: INSERT INTO `cortextesta` (`id`, `name`, `cortextestb`) VALUES
// (1, 'SomthingA', NULL);
然后是这个:
$cta = new \models\CortexTestA();
$cta->load(array('id = ?', 1));
$ctb = new \models\CortexTestB();
$ctb->name = "SomethingB";
$ctb->cortextesta[] = $cta;
$ctb->save();
关系 table cortextest_a_b 仍然是空的。
我做错了什么?
当关系仍然为空时,属性 getter 当前 returns NULL
。这就是数组修改不幸不起作用的原因。您可以像这样轻松解决问题:
if (!$ctb->cortextesta)
$ctb->cortextesta = array($cta);
else
$ctb->cortextesta[] = $cta;
$ctb->save();
我看看能不能稍微优化一下。关于过时字段的问题确实是一个错误。我会尽快修补它。谢谢。
嗨,我无法让 Cortex hasMany 与 hasMany 关系正常工作,所以我做了一个简单的测试。我在我的模型命名空间
中创建了两个 类、CortexTestA 和 CortexTestBnamespace models;
use DB\Cortex;
class CortexTestA extends Cortex {
protected $fieldConf = array(
'name' => array(
'type' => 'VARCHAR256',
'nullable' => false
),
'cortextestb' => array(
'has-many' => array('models\CortexTestB', 'cortextesta', 'cortextest_a_b')
)
);
// constructor etc. follows
这是 CortexTestB 的字段配置文件:
'cortextesta' => array(
'has-many' => array('models\CortexTestA', 'cortextestb', 'cortextest_a_b')
)
接下来我运行设置命令
\Models\CortexTestA::setup();
\Models\CortexTestB::setup();
但是已经发生了一些事情运行ge,两个table现在都有过时的字段:
CREATE TABLE IF NOT EXISTS `cortextesta` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cortextestb` int(11) DEFAULT NULL
)
CREATE TABLE IF NOT EXISTS `cortextestb` (
`id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`cortextesta` int(11) DEFAULT NULL
)
虽然 m2m table 确实创建正确:
CREATE TABLE IF NOT EXISTS `cortextest_a_b` (
`id` int(11) NOT NULL,
`cortextesta` int(11) DEFAULT NULL,
`cortextestb` int(11) DEFAULT NULL
)
但是现在当我运行这个
$cta = new \models\CortexTestA();
$cta->name = "SomethingA";
$cta->save();
// Results in: INSERT INTO `cortextesta` (`id`, `name`, `cortextestb`) VALUES
// (1, 'SomthingA', NULL);
然后是这个:
$cta = new \models\CortexTestA();
$cta->load(array('id = ?', 1));
$ctb = new \models\CortexTestB();
$ctb->name = "SomethingB";
$ctb->cortextesta[] = $cta;
$ctb->save();
关系 table cortextest_a_b 仍然是空的。 我做错了什么?
当关系仍然为空时,属性 getter 当前 returns NULL
。这就是数组修改不幸不起作用的原因。您可以像这样轻松解决问题:
if (!$ctb->cortextesta)
$ctb->cortextesta = array($cta);
else
$ctb->cortextesta[] = $cta;
$ctb->save();
我看看能不能稍微优化一下。关于过时字段的问题确实是一个错误。我会尽快修补它。谢谢。