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();

我看看能不能稍微优化一下。关于过时字段的问题确实是一个错误。我会尽快修补它。谢谢。