如何在yii2中创建搜索多表的模型

时间:2016-10-04 13:33:40

标签: php yii2 searchqueryset

我想在yii2中的多表中搜索。怎么做这个动作?

<?php

namespace app\models;

use Yii;
use yii\db\Query;
use app\models\Article;
use app\models\Certificates;
use app\models\News;
use app\models\Pages;
use app\models\Projects;
use app\models\NewsSearch;

我希望在多表中搜索。该表与Together

没有任何关系

我想在yii2中写这样的查询:

select *   from news , article , projects where (any column for this tables ) like %search%

1 个答案:

答案 0 :(得分:1)

您可以使用关系将activeRelation添加到主模型中,然后在正确的搜索功能中使用该关系  例如(只是一个简短的建议):

/* ActiveRelation */
public function getMyExtModelRelation()
{
   return $this->hasOne(MyExtModel::className(), ['id' => 'ext_id']);
}

并在主模型搜索中

/* search function  */ 

 .....
 ....
// filter by MyExtModel attribute
 $query->joinWith(['myExModelRelation' => function ($q) {
     $q->where('tbl_my_ext_model.my_attribute LIKE "%' . $this->my_attribute . '%"');
}]);

在这里,您可以找到常用相关和计算搜索过滤器的好教程,并对http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

进行排序

我不明白你要做什么,你的查询结果可能很大而且用处不大但无论如何你 想要一个你可以使用的genaric查询

use yii\db\Query;
.....
$connection = \Yii::$app->db;

$any_column  = "your_any_column";
$any_search  = " concat('%', '". $your_search ."', '%'); "
$sql ="select *   from news, article , projects  where " . $any_column  . $any_search ;

$yourModels  = $connection->createCommand($sql);->queryAll();

可能是您必须为从模型中选择反向此列的列中使用的别名指定别名,或者使用完整名称(tablename.columnname)