2016-10-04 54 views
-2

我想在yii2的多表中搜索。如何做這個動作?如何在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; 

我想在多表中搜索。該表有共同

我想要寫yii2這樣的查詢沒有任何關係:

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

回答

1

可以使用關係添加activeRelation在你的主模型做出來,然後用關係在適當的搜索功能
例如(只是簡單的建議):

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

,並在主modelSearch

/* 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/

我不明白你在trynd做什麼和您的查詢的結果可能是巨大的,沒有多大用處,但無論如何,如果你想 一個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(); 

可能是您必須指定別名列,你在選擇從模型使用retrive此列或使用完整的名稱(tablename.columnname)

+0

我想要在多表中搜索。 那個表與我沒有任何關係 我更新了這個帖子。 – Saltern

+0

我已更新答案 – scaisEdge

+0

SQLSTATE [42000]:語法錯誤或訪問衝突:1064您的SQL語法中有錯誤;請檢查與您的MariaDB服務器版本相對應的手冊,以獲取在第1行'concat('%',yes,'%')'附近使用的正確語法。 正在執行的SQL是:select * from新聞,article新聞。 fTitle concat('%',是,'%'); !!!!! – Saltern

相關問題