Yii2字段只能通过魔术方法访问

时间:2016-03-11 21:57:45

标签: yii2 many-to-many

/**
 * This is the model class for table "hashtag".
 *
 * @property string $text
 *
 * @property TweetHashtag[] $tweetHashtags
 * @property Tweet[] $tweets
 */
class Hashtag extends ActiveRecord
{
.........
    public function getTweetHashtags()
    {
        return $this->hasMany(TweetHashtag::className(), ['hashtag_text' => 'text']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getTweets()
    {
        return $this->hasMany(Tweet::className(), ['id' => 'tweet_id'])->viaTable('tweet_hashtag', ['hashtag_text' => 'text']);
    }
}

当我在某个组件中时

   $hashtags = Hashtag::find()
                ->with('tweets')
                ->where(['text' => $hashtagText])
                ->all();

            foreach($hashtags as $hashtag)
            {
                print_r($hashtag->tweets);
            }

它正在工作,但为什么推文 - 仅通过魔术方法访问的字段,我该如何解决?并且tweetHashtags运作良好。

类推文具有相同的关系,但public function getHashtags()没有遇到此问题。

1 个答案:

答案 0 :(得分:1)

你的问题不明确。可以使用属性表单(例如Component)访问get类中以getName开头的每个方法(如name)。在特殊情况下,Yii的ActiveRecord的关系,如果你通过财产形式访问关系,你会得到结果。事实上,$this->tweets$this->getTweets()->all()的缩写。

P.S:关于Yii2文件http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#accessing-relational-data

  

注意:虽然此概念看起来类似于对象属性功能,   有一个重要的区别。对于普通对象属性   属性值与定义的getter方法的类型相同。一个   然而,relation方法返回一个yii \ db \ ActiveQuery实例   访问关系属性将返回yii \ db \ ActiveRecord   实例或这些实例的数组。

$customer->orders; // is an array of `Order` objects
$customer->getOrders(); // returns an ActiveQuery instance
     

这对于创建自定义查询很有用,这将在下一节中介绍。