1

我的申请中的关系有问题。我有以下表格:

邮政:

编号 | 标题 | 正文 | 标签

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

它返回“拉拉”

我在哪里犯错了?

编辑:我在 sql 查询中看到使用 post id,但不是 label id。如何改变这个?

4

3 回答 3

4

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

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

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

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

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

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

'postLabel' => array(self::BELONGS_TO, 'PostLabel', 'label')
于 2013-09-02T18:49:13.173 回答
1

您的关系使用了错误的外键列。它必须是label

'postLabel' => array(self::HAS_ONE, 'PostLabel', 'label'),
于 2013-09-02T17:59:20.937 回答
0

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

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

在 post_label 您应该有一个字段,post_id并且在您的关系中您将声明

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

然后你会得到一些东西!

于 2013-09-02T16:06:30.933 回答