我使用 yii2 构建一个需要连接一些表的应用程序。我可以简单地加入他们并搜索相关领域的数据。我通过添加这样的连接来做到这一点>
public function getNextTab()
{
return $this->hasOne(NextTab::className(),['id' =>'id_nexttab']);
}
然后像这样在搜索模型中请求数据->
->where ('id'='ok') ->
->joinWith('nextTab')
->joinWith('nextTab.nextTab1')
->joinWith('nextTab.nextTab1.nextTab2');
我的问题是当我尝试对来自不同数据库的表执行此操作时。查询是给我这样的错误
SQLSTATE[42S02]: Base table or view not found:
有什么技巧可以通过吗?或者如何进行其他连接方式来获取数据。
最佳答案
您的 RDBMS 可能不支持连接来自不同数据库的表(例如 PostgreSQL)。但如果支持( MSSQL , MySQL ),则表名应以数据库名称为前缀(如果需要,还应加上模式)。您可以使用 {{%TableName}}
syntax 在 Yii2 中实现此目的在 tableName()
函数中。
public static function tableName()
{
return '{{%table_name}}';
}
但是如果它们位于不同的服务器上,那么连接来自不同数据库的表时要小心——这可能会非常慢。
如果您只想获取相关数据(WHERE
中不使用连接表),则使用 with()
而不是 joinWith()
。这将作为带有 IN
语句的单独查询执行。在大多数情况下,这种方式具有更好的性能,并且对于不同的来源(甚至不同的 DBMS)没有问题。
->with('nextTab', 'nextTab.nextTab1', 'nextTab.nextTab1.nextTab2')
关于sql - 在不同的数据库中搜索相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616929/