如何解决ThinkPHP配置特定连接后视图模式显示表名不存在的错误?

2026-04-03 13:461阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

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

如何解决ThinkPHP配置特定连接后视图模式显示表名不存在的错误?

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

如何解决ThinkPHP配置特定连接后视图模式显示表名不存在的错误?

[代码][PHP]phpclass CustomViewModel extends Think\Model\ViewModel{ protected function getTableName() { return 'custom_table_name'; }}

// 使用时传递connection+1$connection='connection+1';Model::getInstance('CustomViewModel', $connection);

问题出现的原因是因为视图模型中并未使用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; } }

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

如何解决ThinkPHP配置特定连接后视图模式显示表名不存在的错误?

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

如何解决ThinkPHP配置特定连接后视图模式显示表名不存在的错误?

[代码][PHP]phpclass CustomViewModel extends Think\Model\ViewModel{ protected function getTableName() { return 'custom_table_name'; }}

// 使用时传递connection+1$connection='connection+1';Model::getInstance('CustomViewModel', $connection);

问题出现的原因是因为视图模型中并未使用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; } }