相關的表值我有3個表:Yii2 GridView控件執行篩選和排序爲外國表
CREATE TABLE tabCve
(
intCveID INTEGER NOT NULL AUTO_INCREMENT,
strNumber VARCHAR(20) NOT NULL,
fltScore FLOAT(0),
strDescription TEXT,
datImported DATETIME NOT NULL DEFAULT NOW(),
intCvePhaseID INTEGER,
intCveTypeID INTEGER,
PRIMARY KEY (intCveID),
KEY (intCvePhaseID),
KEY (intCveTypeID)
) ;
CREATE TABLE tabProgress
(
intProgressID INTEGER NOT NULL AUTO_INCREMENT,
intProgressCveID INTEGER NOT NULL,
intProgressUserID INTEGER NOT NULL,
intProgressStateID INTEGER NOT NULL,
intProgressCategoryID INTEGER,
datCreated DATETIME NOT NULL,
PRIMARY KEY (intProgressID),
KEY (intProgressCategoryID),
KEY (intProgressCveID),
KEY (intProgressStateID),
KEY (intProgressUserID)
) ;
CREATE TABLE tabCategory
(
intCategoryID INTEGER NOT NULL AUTO_INCREMENT,
strCategory VARCHAR(50) NOT NULL,
PRIMARY KEY (intCategoryID)
) ;
我已經創建了一個全球信息基礎設施的CRUD tabCve
。 我是在執行領域的篩選和排序功能在引用的表像intCvePhaseID
全成現在我想通過tabProgress
實現此爲tabCategory
tabCve
和tabProgress
之間的關係爲1:1
怎麼辦我必須在我的SearchModel中實現它?
我做了什麼至今:
在Model:
public function getProgress()
{
return $this->hasOne(TabProgress::className(),['intProgressCveID' => 'intCveID'])->with(['category']);
}
public function getCategory()
{
return $this->hasOne(TabCategory::className(),['intCategoryID' => 'intProgressCategoryID']);
}
在SearchModel:
公共職能搜索($ params)方法 { $查詢= TabCve: :找();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort'=> ['defaultOrder' => ['strNumber' => 'DESC']],
]);
$query->select(["intCveID","strNumber","fltScore","strDescription","datImported","intCvePhaseID","intCveTypeID",'progress.intProgressCategoryID']);
$query->joinWith("phase");
$query->joinWith("type");
$query->joinWith("progress");
$query->Where(['not like', 'strDescription', '** RESERVED **%', false]);
$query->andWhere(['not like', 'strDescription', '** REJECT **%', false]);
//$query->andWhere(["intProgressID" => null]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
$query->andFilterWhere([
'intCveID' => $this->intCveID,
'fltScore' => $this->fltScore,
'datImported' => $this->datImported,
]);
$query->andFilterWhere(['like', 'strNumber', $this->strNumber])
->andFilterWhere(['like', 'strDescription', $this->strDescription])
->andFilterWhere(['like','tabPhase.strPhase', $this->intCvePhaseID])
->andFilterWhere(['like','datImported',$this->datImported])
->andFilterWhere(['like','tabType.strType', $this->intCveTypeID])
->andFilterWhere(['like','tabProgress.tabCategory.strCategory', $this->intCveTypeID])
;
return $dataProvider;
}
怎麼辦我要實現在這些線路中的字段:
$query->select(["intCveID","strNumber","fltScore","strDescription","datImported","intCvePhaseID","intCveTypeID",'progress.intProgressCategoryID']);
和:
->andFilterWhere(['like','tabProgress.tabCategory.strCategory', $this->intCveTypeID])
感謝您的反饋意見。我應該在這裏放置什麼: ' - > andFilterWhere(['like','tabProgress.tabCategory.strCategory',$ this-> intCveTypeID])' 因爲這種方法不起作用。 – bnu
我已更新答案。我希望這是有用的 – scaisEdge
接受這個答案,因爲它使我找到了正確的解決方案。 我將提供我的代碼作爲答案的完整解決方案。 – bnu