我遇到了yii2错误:普通\ models \ Book没有名字"最喜欢的"。
当我尝试添加:
public function search($params) {
$query = Book::find();
$query->joinWith(['author', 'profile', 'favorite']);
在书模型中我确实有公共功能:
public function getFavoritedIcon() {
if (isset($this->favorite)) {
return '<i class="glyphicon glyphicon-asterisk books-form"></i>';
} else {
return '';
}
}
还有这个额外的功能来获取图标
public function getFavoritedIcon() {
if (isset($this->favorite)) {
return $icon;
} else {
return '';
}
}
这在我想要添加排序和过滤的网格中工作正常:
[
'label' => 'Favorites',
'attribute' => 'favorite',
'value' => 'favoritedIcon',
'hAlign' => 'center',
'vAlign' => 'middle',
'format' => 'raw',
'width' => '50px',
],
我使用的其他模型做了一些不同的事情:
抽象类收藏者extends \ yii \ db \ ActiveRecord {
public static function tableName()
{
return 'user_favorite';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['user_id', 'book_id'], 'required'],
[['user_id', 'book_id'], 'integer'],
[['selectedTime'], 'safe']
];
}
有什么线索我做错了吗?
=============================================== =======
Pedro del Sol回答后的更新
代码中有一些错误,但是主要的一个是由Pedro回答的,我确实在Book模型中有一个最喜欢的功能,但不是多个输出的收藏夹。
所以现在它的工作方式如下:
在Book模型中
public function getFavorite() {
$userID = Yii::$app->user->identity->id;
return Favorite::find()->where(['user_id' => $userID, 'book_id' => $this->id])->one();
}
public function getFavorites() {
$userID = Yii::$app->user->identity->id;
return $this->hasMany(Favorite::className(), ['book_id' => 'id'], ['book_id' => $this->id]);
}
public function getFavoritedIcon() {
if (isset($this->favorite)) {
return '<i class="glyphicon glyphicon-asterisk books-form"></i>';
} else {
return '';
}
}
在BookSearch模型中:
public function search($params) {
$query = Book::find();
$query->joinWith(['favorites']);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$dataProvider->setSort([
'attributes' => [
'title',
'author_id',
'rights_owner_id',
'user_favorite.user_id',
]
]);
和网格视图:
[
'label' => 'Favorites',
'attribute' => 'user_favorite.user_id',
'value' => 'favoritedIcon',
'hAlign' => 'center',
'vAlign' => 'middle',
'format' => 'raw',
'width' => '50px',
],
答案 0 :(得分:6)
将方法设为getFavoritedIcon()
与声明与getFavorite()
我假设您的Book
模型类中有方法getAuthor()
和getProfile()
,它们会返回将Book
与Author
和Profile
相关联的查询Favorite
。您需要与/**
* @return \yii\db\ActiveQuery
*/
public function getFavorites()
{
return $this->hasMany(Favorite::className(), ['book_id' => 'ID']);
}
(s)类似的内容,但我怀疑多重性会有所不同。
我想宣布你的关系,你需要像
这样的东西Book
如果Favorite
和/**
* @return \yii\db\ActiveQuery
*/
public function getFavorite()
{
return $this->hasOne(Favorite::className(), ['book_id' => 'ID']);
}
之间的关系是一对多(最有可能)或
joinWith()
如果关系是一对一的。
然后,您可以将IF CSTR({Command.payment_ind_vsl}) = "F" OR
CSTR({Command.payment_ind_mi}) = "F" OR
CSTR({Command.payment_ind_ci}) = "F" THEN "Completed"
ELSE "In Progress"
与“最喜欢的”&#39;或者&#39;收藏夹&#39;取决于你的关系的多重性。