我是Yii2框架的新手,我现在正尝试使用关系访问Listview中的数据。有人可以解释为什么我的代码不起作用。 我想找一个属于文档的标签。
这是我的关系:
public function getTags() {
return $this->hasMany(Tag::className(), ['id' => 'tag_id'])
->viaTable('tbl_document_tag', ['document_id' => 'id']);
}
这是我的控制器:
public function actionTag() {
$model = new Search();
$tag = Yii::$app->getRequest()->getQueryParam('tag');
//Documents
$documentModel = new Document;
$documentSearch = $model->searchDocumentsByTag($documentModel, $tag);
return $this->render('results', [
'model' => $model,
'documentSearch' => $documentSearch,
'documentModel' => $documentModel
]);
}
以下是我的观点:
public function searchDocumentsByTag($documentsModel, $keyword) {
$query = Document::find()
->with('tags')
->andFilterWhere([
'or',
['like', 'tags.state', 1],
['like', 'tags.slug', $keyword],
]);
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
return $dataProvider;
我收到以下错误:
数据库异常 - yii \ db \ Exception
SQLSTATE [42S22]:未找到列:1054未知列' tags.state'在' where子句' 正在执行的SQL是:SELECT COUNT(*)FROM
tbl_document
WHERE(tags
。state
LIKE'%1%')OR(tags
。slug
喜欢'%steekwoord%') 错误信息:数组 ( [0] => 42S22 1 => 1054 [2] =>未知栏' tags.state'在' where子句' ) ↵ 引起:PDOExceptionSQLSTATE [42S22]:未找到列:1054未知列' tags.state'在' where子句'
答案 0 :(得分:1)
您只需使用joinWith()
代替with()
:
此方法允许您重用现有关系定义来执行JOIN查询。 [...]请注意,由于将执行JOIN查询,因此您有责任消除列名称的歧义。
e.g。 :
$query = Document::find()
->joinWith('tags tags')
->andFilterWhere([
'or',
['like', 'tags.state', 1],
['like', 'tags.slug', $keyword],
]);