/**
* 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()
没有遇到此问题。
答案 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
这对于创建自定义查询很有用,这将在下一节中介绍。