Привет, я не могу заставить работать 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 остается пустой.
Что я делаю неправильно?
Когда отношение все еще пусто, свойство getter в настоящее время возвращает NULL
, Вот почему модификация массива, к сожалению, не работает. Вы можете легко обойти это так:
if (!$ctb->cortextesta)
$ctb->cortextesta = array($cta);
else
$ctb->cortextesta[] = $cta;
$ctb->save();
Я посмотрю, смогу ли я немного оптимизировать это. Проблема с устаревшими полями действительно является ошибкой. Я скоро исправлю. Благодарю.
Других решений пока нет …