首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >皮质hasMany没有在m2m表中创建条目

皮质hasMany没有在m2m表中创建条目
EN

Stack Overflow用户
提问于 2015-08-03 20:01:50
回答 1查看 97关注 0票数 0

嗨,我不能让Cortex hasMany到hasMany关系工作,所以我做了一个简单的测试。我在模型命名空间中创建了两个类,CortexTestA和CortexTestB。

代码语言:javascript
复制
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:

代码语言:javascript
复制
    'cortextesta' => array(
        'has-many' => array('models\CortexTestA', 'cortextestb', 'cortextest_a_b')
    )   

接下来,我运行安装命令

代码语言:javascript
复制
\Models\CortexTestA::setup();
\Models\CortexTestB::setup();

但是已经发生了一些奇怪的事情,两个表现在都有过时的字段:

代码语言:javascript
复制
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表的创建是正确的:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `cortextest_a_b` (
  `id` int(11) NOT NULL,
  `cortextesta` int(11) DEFAULT NULL,
  `cortextestb` int(11) DEFAULT NULL
) 

但现在当我运行这个

代码语言:javascript
复制
$cta = new \models\CortexTestA();
$cta->name = "SomethingA";
$cta->save();

// Results in: INSERT INTO `cortextesta` (`id`, `name`, `cortextestb`) VALUES
//        (1, 'SomthingA', NULL);

然后这个:

代码语言:javascript
复制
$cta = new \models\CortexTestA();
$cta->load(array('id = ?', 1));

$ctb = new \models\CortexTestB();
$ctb->name = "SomethingB";
$ctb->cortextesta[] = $cta;
$ctb->save();

关系表cortextest_a_b仍然是空的。我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 09:02:13

当关系仍然为空时,属性getter当前返回NULL。这就是为什么数组修改不幸不能工作的原因。您可以这样轻松地解决这个问题:

代码语言:javascript
复制
if (!$ctb->cortextesta)
  $ctb->cortextesta = array($cta);
else
  $ctb->cortextesta[] = $cta;
$ctb->save();

我会看看是否能对此进行一些优化。有关过时字段的问题确实是一个缺陷。我很快就会补好的。谢谢。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31795784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档