如何解决在ThinkPHP中修复指定连接时视图模式显示表名不存在的错误?

更新于
2026-09-26 01:34:18
2阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计362个文字,预计阅读时间需要2分钟。

如何解决在ThinkPHP中修复指定连接时视图模式显示表名不存在的错误?

问题出现的原因是:因为图像模型中尚未使用Connection指定的数据库!

处理方式:

1.自定义一个视图模型继承自Think\Model\ViewModel。

2.重写getTableName方法。

3.在调用M函数的时候传递connection参数,并递增connection计数。

代码示例:

php

// 在模型中使用$viewModel=new CustomViewModel();$viewModel->setConnection('your_connection_name');

如何解决在ThinkPHP中修复指定连接时视图模式显示表名不存在的错误?

// 调用模型方法$data=$viewModel->find();

问题出现的原因是因为视图模型中并未使用Connection指定的数据库!
处理方式:自定义一个视图继承自\Think\Model\ViewModel,并重写getTableName方法,调用M函数的时候传递connection

1.[代码][PHP]代码

<?php namespace Common\Model; /** * ViewModel处理 * @author hxtgirq * @date 2016-07-15 */ class ViewModel extends \Think\Model\ViewModel { public function getTableName() { if(empty($this->trueTableName)) { $tableName = ''; foreach ($this->viewFields as $key=>$view){ // 获取数据表名称 if(isset($view['_table'])) { // 2011/10/17 添加实际表名定义支持 可以实现同一个表的视图 $tableName .= $view['_table']; $prefix = $this->tablePrefix; $tableName = preg_replace_callback("/__([A-Z_-]+)__/sU", function($match) use($prefix){ return $prefix.strtolower($match[1]);}, $tableName); }else{ $class = $key.'Model'; $Model = class_exists($class)?new $class():M($key,'',$this->connection); $tableName .= $Model->getTableName(); } // 表别名定义 $tableName .= !empty($view['_as'])?' '.$view['_as']:' '.$key; // 支持ON 条件定义 $tableName .= !empty($view['_on'])?' ON '.$view['_on']:''; // 指定JOIN类型 例如 RIGHT INNER LEFT 下一个表有效 $type = !empty($view['_type'])?$view['_type']:''; $tableName .= ' '.strtoupper($type).' JOIN '; $len = strlen($type.'_JOIN '); } $tableName = substr($tableName,0,-$len); $this->trueTableName = $tableName; } return $this->trueTableName; } }

本文共计362个文字,预计阅读时间需要2分钟。

如何解决在ThinkPHP中修复指定连接时视图模式显示表名不存在的错误?

问题出现的原因是:因为图像模型中尚未使用Connection指定的数据库!

处理方式:

1.自定义一个视图模型继承自Think\Model\ViewModel。

2.重写getTableName方法。

3.在调用M函数的时候传递connection参数,并递增connection计数。

代码示例:

php

// 在模型中使用$viewModel=new CustomViewModel();$viewModel->setConnection('your_connection_name');

如何解决在ThinkPHP中修复指定连接时视图模式显示表名不存在的错误?

// 调用模型方法$data=$viewModel->find();

问题出现的原因是因为视图模型中并未使用Connection指定的数据库!
处理方式:自定义一个视图继承自\Think\Model\ViewModel,并重写getTableName方法,调用M函数的时候传递connection

1.[代码][PHP]代码

<?php namespace Common\Model; /** * ViewModel处理 * @author hxtgirq * @date 2016-07-15 */ class ViewModel extends \Think\Model\ViewModel { public function getTableName() { if(empty($this->trueTableName)) { $tableName = ''; foreach ($this->viewFields as $key=>$view){ // 获取数据表名称 if(isset($view['_table'])) { // 2011/10/17 添加实际表名定义支持 可以实现同一个表的视图 $tableName .= $view['_table']; $prefix = $this->tablePrefix; $tableName = preg_replace_callback("/__([A-Z_-]+)__/sU", function($match) use($prefix){ return $prefix.strtolower($match[1]);}, $tableName); }else{ $class = $key.'Model'; $Model = class_exists($class)?new $class():M($key,'',$this->connection); $tableName .= $Model->getTableName(); } // 表别名定义 $tableName .= !empty($view['_as'])?' '.$view['_as']:' '.$key; // 支持ON 条件定义 $tableName .= !empty($view['_on'])?' ON '.$view['_on']:''; // 指定JOIN类型 例如 RIGHT INNER LEFT 下一个表有效 $type = !empty($view['_type'])?$view['_type']:''; $tableName .= ' '.strtoupper($type).' JOIN '; $len = strlen($type.'_JOIN '); } $tableName = substr($tableName,0,-$len); $this->trueTableName = $tableName; } return $this->trueTableName; } }