2012-11-20 74 views
0

所以我有點粘在上面,我不斷收到SQL Server錯誤。是的,我正在使用mssql服務器:| - 不是我的數據庫。CakePHP的 - MSSQL錯誤當篩選記錄由遙遠協會

一點背景,我的關係而言是這樣的:

AssetMaintenanceRecord - >(屬於) - >資產 - >(屬於) - >項目 - >(有) - > ProjectManager

(注意ProjectManager就像一個人事表的別名模型,項目表有一個ProjectManager的id,它只是人員ID

所以我想做一個簡單的過濾器,我選擇所有的AssetMaintenanceRecords在ProjectManager搜索。

在AssetMaintenanceRecordsController.php相關的指數函數如下:

public function index() { 
     $conditions = NULL; 
     if (isset($this->params['url']['report']) && $this->params['url']['report'] == 'open') { 
      $conditions[] = array('CompletedDate' => NULL); 
     } 

     if (isset($this->params['url']['report']) && $this->params['url']['report'] == 'notified') { 
      $conditions[] = array('NotifiedDate BETWEEN ? AND ?' => array(date('M d Y g:iA', strtotime($this->params['url']['datefrom'])), date('M d Y g:iA', strtotime($this->params['url']['dateto'])))); 
     } 

     if (isset($this->params['url']['report']) && $this->params['url']['report'] == 'completed') { 
      $conditions[] = array('CompletedDate BETWEEN ? AND ?' => array(date('M d Y g:iA', strtotime($this->params['url']['datefrom'])), date('M d Y g:iA', strtotime($this->params['url']['dateto'])))); 
     } 

     if (isset($this->params['url']['project'])) { 
      $conditions[] = array('Asset.aCurrProject' => $this->params['url']['project']); 
     } 

     if (isset($this->params['url']['ptCode']) && $this->params['url']['ptCode'] != NULL) { 
      $conditions[] = array('Asset.ptCode' => $this->params['url']['ptCode']); 
     } 

     if (isset($this->params['url']['asset']) && $this->params['url']['asset'] != NULL) { 
      $conditions[] = array('Asset.aFullCode' => $this->params['url']['asset']); 
     } 

     if (isset($this->params['url']['pm']) && $this->params['url']['pm'] != NULL) { 
      $pm_search_terms = explode(' ', $this->params['url']['pm']); 
      foreach($pm_search_terms as $pm_search_term) { 
       $conditions[] = array(
           'OR' => array(
             'ProjectManager.PerGivenName LIKE' =>'%'.$pm_search_term.'%', 
             'ProjectManager.PerSurname LIKE' =>'%'.$pm_search_term.'%', 
           ) 
         ); 
      } 
     } 

     $this->paginate['AssetMaintenanceRecord'] = array(
      'contain' => array(
       'Asset' => array(
       'Project' => array(
        'ProjectManager' 
      )) 
      ), 
      'order' => 'CompletedDate ASC', 
      'limit' => 10 
     ); 

     $planttype = $this->AssetMaintenanceRecord->Asset->PlantType->find('list'); 
     $this->set(compact('planttype')); 
     $this->AssetMaintenanceRecord->recursive = -1; 
     $this->set('records', $this->paginate('AssetMaintenanceRecord', $conditions)); 
    } 

沒有ProjectManager過濾它工作正常,我可以附和了ProjectManager陣列等,但是當我在輸入搜索字詞我得到這個錯誤:

The multi-part identifier "ProjectManager.PerSurname" could not be bound.

已執行的SQL看起來像:

「SELECT TOP 10 [AssetMaintenanceRecord] [MtceRegID] AS [AssetMaintenanceRecord_ 0],[AssetMaintenanceRecord] [由assetid] AS [AssetMaintena。 nceRecord _1],CAST(CAST([AssetMaintenanceRecord] [MtceRegNote] AS VARCHAR(8000))以文本)AS [AssetMaintenanceRecord_ 2],[AssetMaintenanceRecord] [PONO] AS [AssetMaintenanceRecord _3],CAST(CAST( [AssetMaintenanceRecord]。[NotifiedDate] AS VARCHAR(8000))AS TEXT)AS [AssetMaintenanceRecord_ 4],CAST(CAST([AssetMaintenanceRecord]。[CompletedDate] AS VARCHAR(8000))AS TEXT)AS [AssetMaintenanceRecord_5], [AssetMaintenanceRecord] [MtceRegTitle] AS [AssetMaintenanceRecord_ 6],CAST(CAST([AssetMaintenanceRecord] [CreatedDate] AS VARCHAR(8000))以文本)AS [AssetMaintenanceRecord _7],[AssetMaintenanceRecord] [CreatedUserID] AS [ AssetMaintenanceRecord_ 8],CAST(CAST([AssetMaintenanceRecord] [ModifiedDate] AS VARCHAR(8000))以文本)AS [AssetMaintenanceRecord 0 [AssetMaintenanceRecord]。[ModifiedUserID] AS [AssetMaintenanceRecord_ 10],[Asset]。[aID] AS [Asset_11],[Asset]。[ptCode] AS [Asset_ 12],[Asset]。 [aNo] AS [Asset _13],[Asset]。[aFullCode] AS [Asset_ 14],[Asset]。[aDesc] AS [Asset_15],[Asset]。[aMake] AS [Asset_ 16 ],[Asset]。[aModel] AS [Asset_17],[Asset]。[aSerialNo] AS [Asset_ 18],[Asset]。[aRegNo] AS [Asset_19],CAST(CAST([Asset ] [aRegExpDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 20],[Asset]。[aActive] AS [Asset _21],[Asset]。[aIncAssetRpt] AS [Asset_ 22]資產]。[aIncFinanceRpt] AS [資產 _資產_24],[資產]。[aIsSurveyEquip] AS [資產_25],[資產]。[aCostedItem] AS [資產_ 26],[資產]。[ aCostedPeriod AS [Asset_27],[Asset]。[aWarrantyPeriod] AS [Asset_ 28],[Asset]。[aPONo] AS [Asset_29],CAST(CAST([Asset]。[aPODate] AS VARCHAR (8000))AS TEXT AS [Asset_ 30],CAST(CAST([Asset]。[aPOCostExGst] AS VARCHAR(8000))AS TEXT)AS [Asset _31],[Asset]。[aQtyStock] AS [資產_32],[資產]。[aQtyInUse] AS [Asset _33],[Asset]。[aCurrProject] AS [Asset_ 34],[Asset]。[aCurrOperator] AS [Asset_35],[Asset]。[aStolen] AS [Asset_ 36 CAST(CAST)[CAST(CAST([Asset]。[aStolenDate] AS VARCHAR(8000))AS TEXT)AS [Asset _37],[Asset]。[aWO] AS [Asset_ 38] 。[aWODate] AS VARCHAR(8000))AS TEXT)AS [Asset _39],[Asset]。[aSold] AS [Asset_ 40],CAST(CAST([Asset]。[aSoldDate] AS VARCHAR(8000) )作爲[資產_41],CAST(CAST([Asset]。[aSoldPrice] AS VARCHAR(8000))AS TEXT)AS [Asset_ 42],CAST(CAST([Asset]。[aNotes] AS VARCHAR(8000))AS TEXT)AS [Asset_43],CAST(CAST([Asset]。[LastModDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 44],CAST CAST([Asset]。[CreatedDate] AS VARCHAR(8000))AS TEXT)AS [Asset_45],[Asset]。[aCat] AS [Asset_ 46],[Asset]。[aPoliceRptNo] AS [Asset _ Asset]。[aRelatedAssetID] AS [Asset_ 48],[Asset]。[aRelatedAssetFullCode] AS [Asset _49],[Asset]。[aPayMethod] AS [Asset_ 50],[Asset]。[ a資產_51],CAST(CAST([Asset]。[aLastFuelDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 52],[Asset]。[aFuelType] AS [Asset_53] FROM [tbMtceRegister] AS [AssetMaintenanceRecord] LEFT JOIN [tbAsset] AS [Asset] ON([AssetMaintenanceRecord]。[AssetID] = [Asset]。[aID])WHERE [CompletedDate] IS NULL AND [Asset]。[aCurrProject] IS NULL AND(([ProjectManager]。[PerGivenName] LIKE'%test%')OR([ProjectManager]。[PerSurname] LIKE'%test%'))ORDER BY [Co mpletedDate] ASC'

對我來說看起來不錯,但我很明顯會出錯嗎?

任何幫助表示讚賞。

在此先感謝。

回答

0

ProjectManager不包含在FROMJOIN部分 但用於WHEREOR ([ProjectManager].[PerSurname] LIKE

+0

哦,是的,我可以看到...所以我將如何去加盟ProjectManager /項目的查詢? (sql絕對不是我的強項)。 – double07

+0

我不知道你的SQL在naming如 加入ProjectManager ProjectManager.ID =項目。ProjectManager_ID 左加入,如果有可能,沒有經理分配 – bummi

+0

好了,所以我試圖做了加入這樣的:'$這個 - >分頁[「AssetMaintenanceRecord」] =陣列( \t \t「包含」 =>陣列( \t \t \t '資產'=>數組( \t \t \t \t '項目'=>數組( \t \t \t \t \t 'ProjectManager' \t \t \t)) \t \t \t) \t \t '順序'=> 'CompletedDate ASC', \t '限制'=> 10, \t \t '連接'=>數組( \t \t \t陣列( '表'=>「tbPersonnel ' \t \t \t \t '別名'=> 'ProjectManager', \t \t \t \t '類型'=> '左', \t \t \t \t' conditi插件=>數組( \t \t \t \t \t 'ProjectManager.perID = Project.pjProjectManager', \t \t \t \t) \t \t \t) \t \t) \t \t);' – double07