首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

ThinkPHP 視圖模型查詢報錯 Table doesn't exist 解決:檔案命名規範

     編輯:PHP 相關知識

ThinkPHP 視圖模型查詢報錯 Table doesn't exist 解決:檔案命名規範

使用 ThinkPHP 視圖模型(ViewModel)進行關聯查詢時,若出現 ERR: 1146: Table 'db.pr_order_view' doesn't exist,通常是**模型類別檔案命名錯誤**導致框架未正確識別為視圖模型,進而嘗試查詢不存在的資料表。

錯誤場景重現

// 錯誤命名:OrderView.class.php(缺少 Model 後綴)
class OrderViewModel extends ViewModel { ... }

框架依據檔案名稱判斷模型類型,OrderView.class.php 會被視為普通模型,產生 SELECT ... FROM pr_order_view SQL,導致資料表不存在錯誤。

正確命名規範

  • 檔案名:**OrderViewModel.class.php**
  • 類別名:**OrderViewModel** extends ViewModel

遵循 *Model.class.php 命名慣例,框架才會正確載入為視圖模型,自動產生 JOIN 查詢 SQL 而非查詢單表。

視圖模型定義範例(正確)

class OrderViewModel extends ViewModel {
    public $viewFields = array(
        'Order' => array(
            '_as' => 'Orders',
            'id' => 'oid', 'ordid', 'user', 'product', 'status', 'paynum', 'cat',
            'payment_trade_no', 'ip' => 'mip', 'reserve_time', 'createtime', 'payment_trade_status',
        ),
        'Member' => array(
            'id' => 'mid', 'name' => 'uname', 'cardnum', 'tel', 'reg_time', 'reg_ip',
            'qq', 'email', 'address', 'last_login_time', 'last_login_ip',
            '_on' => 'Orders.user=Member.id'
        ),
        'Product' => array(
            'id', 'shorttitle', 'img1', 'category',
            '_on' => 'Orders.product=Product.id'
        ),
    );
}

新手常見錯誤提醒

  1. 檔案名缺少 Model 後綴(最常見)。
  2. 類別名與檔案名不一致。
  3. 未繼承 ViewModel 卻定義 $viewFields。
  4. 跨分組調用時命名空間或 D('Admin/OrderView') 參數錯誤。

嚴格遵循 ThinkPHP 模型命名慣例,可避免 90% 的視圖模型「資料表不存在」誤報錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved