嗨,我不能让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的字段conf:
'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仍然是空的。我做错了什么?
发布于 2015-08-04 09:02:13
当关系仍然为空时,属性getter当前返回NULL。这就是为什么数组修改不幸不能工作的原因。您可以这样轻松地解决这个问题:
if (!$ctb->cortextesta)
$ctb->cortextesta = array($cta);
else
$ctb->cortextesta[] = $cta;
$ctb->save();我会看看是否能对此进行一些优化。有关过时字段的问题确实是一个缺陷。我很快就会补好的。谢谢。
https://stackoverflow.com/questions/31795784
复制相似问题