2016-10-04 2 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

ここでは

あなたは巨大で、ほとんど使用することができ、良好な一般的な関連と算出された検索フィルタのためのチュートリアルとソートhttp://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

私はあなたがするtryndされているかを理解していないと、クエリの結果を見つけることができますが、とにかく、あなたが

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(); 

を使用することができますgenaricクエリがモデルからこのコラムをretriveまたは完全な名前(のTableName.ColumnName)

を使用するために、あなたが選択して使用する列に別名を割り当てる必要があります可能性がしたい 場合
+0

私は欲しいですマルチテーブルで検索する そのテーブルはTogetherとは関係がありません この投稿を更新しました。 – Saltern

+0

回答を更新しました – scaisEdge

+0

SQLSTATE [42000]:構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。 MariaDBサーバーのバージョンに対応するマニュアルをチェックして正しい構文を確認し、1行目の 'concat('% '、yes、'% ')'近くで使用してください。 実行中のSQLは:select * from news、article where news。 fTitle concat( '%'、yes、 '%'); !!!!! – Saltern