【问题标题】:Yii Framework: relation returns NULLYii 框架:关系返回 NULL
【发布时间】:2013-09-02 13:24:31
【问题描述】:

我的应用程序中的关系有问题。我有以下 表格:

发帖:

标识 |标题 |正文 |标签

1 |啦啦 |啦啦 | 1

post_label:

标识 |名字

1 |安全

2 |其他

两个模型: Post、PostLabel

关系在后期模型中:

'postLabel' => 数组(self::HAS_ONE, 'PostLabel', 'id'),

当我使用这个时:

$model=$this->loadModel('Post',1);

var_dump($model->postLabel);

它返回NULL,但是当我使用时:

$model=$this->loadModel('Post',1);

var_dump($model->title);

它返回'lala'

我哪里出错了?

编辑:我在 sql 查询中看到使用 post id,但不是 label id。怎么改?

【问题讨论】:

  • 什么返回NULL? $model 是 null 还是 $model->postLabel?请发布生成的 SQL 查询。
  • $model->postLabel 返回 NULL。查询:“SELECT postLabel.id AS t1_c0, postLabel.name AS t1_c1 FROM post_labelpostLabel WHERE (postLabel.@987654332'='987654332"@

标签: yii frameworks


【解决方案1】:

我知道这听起来有违直觉(我花了一些时间才习惯),但实际上您需要使用 BELONGS_TO 关系,而不是 HAS_ONE。

查看此链接:http://www.yiiframework.com/wiki/181/relations-belongs_to-versus-has_one/

KEY POINT:BELONGS_TO 关系表示此模型中的字段指向另一个模型中的主键;在这种情况下,当前模型拥有链接字段。

关键点:HAS_ONE 关系表示某个其他模型具有指向该模型主键的链接字段;在这种情况下,相关模型拥有链接字段。

因为 label 是这个 (Post) 模型中的键,它指向另一个 (PostLabel) 模型的主键,所以您需要使用BELONGS_TO 关系。

所以你的关系定义应该是这样的:

'postLabel' => array(self::BELONGS_TO, 'PostLabel', 'label')

【讨论】:

  • 我就是这个意思!非常感谢!
【解决方案2】:

您的关系使用了错误的外键列。一定是label:

'postLabel' => array(self::HAS_ONE, 'PostLabel', 'label'),

【讨论】:

    【解决方案3】:

    您没有任何表或属性来连接 2 个表!

    帖子只有id | title | text | category 和post_label id | name 但是我们怎么知道哪个标签属于哪个帖子?!

    在 post_label 你应该有一个像post_id 这样的字段并且在你的关系中你会声明

    'postLabel' => array(self::HAS_ONE, 'PostLabel', 'post_id'),
    

    那你会得到一些东西的!

    【讨论】:

    • 对不起,我写的是“类别”,但我的意思是“标签”。我想用'id'(来自post_label)加入'label'(来自post)。有办法做到这一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2014-08-21
    • 2019-05-17
    • 2019-07-11
    相关资源
    最近更新 更多