Cortex уже не может создавать записи в таблице m2m

Привет, я не могу заставить работать 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

Это поле conf для CortexTestB:

    'cortextesta' => array(
'has-many' => array('models\CortexTestA', 'cortextestb', 'cortextest_a_b')
)

Далее я запустил команду установки

\Models\CortexTestA::setup();
\Models\CortexTestB::setup();

Но уже происходит что-то странное, обе таблицы теперь имеют устаревшие поля:

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 создается правильно, хотя:

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

таблица отношений cortextest_a_b остается пустой.
Что я делаю неправильно?

0

Решение

Когда отношение все еще пусто, свойство getter в настоящее время возвращает NULL, Вот почему модификация массива, к сожалению, не работает. Вы можете легко обойти это так:

if (!$ctb->cortextesta)
$ctb->cortextesta = array($cta);
else
$ctb->cortextesta[] = $cta;
$ctb->save();

Я посмотрю, смогу ли я немного оптимизировать это. Проблема с устаревшими полями действительно является ошибкой. Я скоро исправлю. Благодарю.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]