用关系替换旧列

时间:2016-08-09 14:53:08

标签: activerecord yii2

我在 Yii2 上有一个博客应用程序,其中包含一个非常旧的数据库

我将文本列post.author替换为关系post.author_id

出于支持原因,旧列处于活动状态。

现在,当我尝试使用$post->author->name时,我首先得到字符串列,而不是关系...
使用getter工作正常$post->getAuthor()->name,但这很难维护。

是否有一些标准解决方案,忽略post.author 属性, 并赞成作者关系

2 个答案:

答案 0 :(得分:1)

您可以重命名关系。如果您将方法getAuthor重命名为getPostauthor,则关系属性将变为postauthor(自动),您可以通过$post->postauthor->name

获取它

答案 1 :(得分:1)

  1. $ post-> getAuthor()返回ActiveQuery,您无法执行$ post-> getAuthor() - > name。
  2. 您可以在模型中添加getter:

    public function getAuthorName(){    $ author = $ post-> getAuthor() - > one();    返回$ author? $ author-> name:null; }

  3. 或者,重命名关系。