所以我有点卡在上面,我不断收到一个 sql server 错误。是的,我正在使用 mssql 服务器:| - 不是我的数据库。
一点背景,我关心的人际关系是这样的:
AssetMaintenanceRecord->(属于)->Asset->(属于)->Project->(有一个)->ProjectManager
(注意 ProjectManager 就像人员表的别名模型。项目表有一个 ProjectManager 的 ID,它只是人员 ID。
所以我试图做一个简单的过滤器,通过在 ProjectManager 上搜索来选择所有 AssetMaintenanceRecords。
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 数组等,但是当我输入搜索词时,会出现以下错误:
无法绑定多部分标识符“ProjectManager.PerSurname”。
执行的 sql 如下所示:
'SELECT TOP 10 [AssetMaintenanceRecord].[MtceRegID] AS [AssetMaintenanceRecord_ 0], [AssetMaintenanceRecord].[AssetID] AS [AssetMaintenanceRecord _1], CAST(CAST([AssetMaintenanceRecord].[MtceRegNote] AS VARCHAR(8000)) AS TEXT) 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) ) 作为文本) 作为 [资产维护记录_7], [AssetMaintenanceRecord].[CreatedUserID] AS [AssetMaintenanceRecord_8 ], CAST(CAST([AssetMaintenanceRecord].[ModifiedDate] AS VARCHAR(8000)) AS TEXT) AS [AssetMaintenanceRecord _9], [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 [资产_21], [Asset].[aIncAssetRpt] AS [Asset_22 ], [Asset].[aIncFinanceRpt] AS [Asset _23], [Asset].[aIsTrailer] AS [Asset_24 ], [Asset].[aIsSurveyEquip] AS [Asset _25]、[Asset].[aCostedItem] AS [Asset_26 ]、[Asset].[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 [Asset_32 ], [Asset].[aQtyInUse] AS [Asset _33], [Asset].[aCurrProject] AS [Asset_34 ], [Asset ].[aCurrOperator] AS [Asset _35], [Asset].[aStolen] AS [Asset_36], CAST(CAST([Asset].[aStolenDate] AS VARCHAR(8000)) AS TEXT) AS [Asset _37], [Asset].[aWO] AS [Asset_38 ], CAST(CAST([Asset]. [aWODate] AS VARCHAR(8000)) AS TEXT) AS [Asset _39], [Asset].[aSold] AS [Asset_40 ], CAST(CAST([Asset].[aSoldDate] AS VARCHAR(8000)) AS TEXT ) AS [Asset _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 _47 ], [Asset].[aRelatedAssetID] AS [Asset_48], [Asset].[aRelatedAssetFullCode] AS [Asset _49], [Asset].[aPayMethod] AS [Asset_ 50], [Asset].[aInvoiceNo] AS [Asset _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] 为 NULL 且 [Asset].[aCurrProject] 为 NULL 且 (([ProjectManager].[PerGivenName] LIKE '%test%') OR ( [ProjectManager].[PerSurname] LIKE '%test%')) ORDER BY [CompletedDate] ASC'
对我来说看起来不错,但我显然在哪里出错了?
任何帮助表示赞赏。
提前致谢。