2016-10-04 4 views
-2

Je souhaite effectuer une recherche dans un tableau multi dans yii2. Comment faire cette action?Comment créer un modèle pour rechercher une table multi dans 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; 

Je recherche dans plusieurs tables. cette table ont aucune relation avec Together

je veux écrire la requête dans yii2 comme ceci:

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

Répondre

1

Vous pouvez le faire en utilisant la relation en ajoutant l'activeRelation le modèle principal, puis utiliser la relation dans une recherche appropriée fonction
par exemple (une brève suggestion):

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

et principal modelSearch

/* search function */ 

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

Ici vous pouvez trouver un bon tutoriel pour filtre de recherche connexes et calculés en commun et trier http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

Je ne comprends pas ce que vous trynd à faire et le résultat de votre requête pourrait être énorme et peu utile, mais de toute façon si vous voulez une requête genaric vous pouvez utiliser

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

pourrait être vous devez attribuer l'alias à la colonne que vous utilisez dans retrive de sélection pour cette colonne à partir de modèles ou d'utiliser le nom complet (nomtable.nomcolonne)

+0

je veux rechercher dans plusieurs tables. cette table n'a aucune relation avec Together J'ai mis à jour cet article. – Saltern

+0

J'ai mis à jour la réponse – scaisEdge

+0

SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MariaDB pour la bonne syntaxe à utiliser près de 'concat ('% ', yes,'% ')' à la ligne 1 Le SQL en cours d'exécution était: select * from news, article where news. ftitle concat ('%', yes, '%'); !!!!! – Saltern