繁体   English   中英

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

[英]How to create model for search for multi table in 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;

我想在多表中搜索。 那张桌子和Together没有任何关系

我想在 yii2 中这样写查询:

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

您可以使用关系将 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/

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

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

可能是您必须为您在 select 中使用的列分配别名以从模型中检索此列或使用完整名称 (tablename.columnname)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM