【发布时间】:2012-11-20 22:31:56
【问题描述】:
所以我有点卡在上面,我不断收到一个 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)) AS TEXT) AS [AssetMaintenanceRecord_7], [AssetMaintenanceRecord].[CreatedUserID] AS [ AssetMaintenanceRecord_8], CAST(CAST([AssetMaintenanceRecord].[ModifiedDate] AS VARCHAR(8000)) AS TEXT) AS [AssetMaintenanceRecord_9], [AssetMaintenanceRecord].[ModifiedUserID] AS [AssetMainten anceRecord_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], [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 [资产_32], [资产].[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] A S [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]) 其中 [CompletedDate] 为 NULL 并且 [Asset] .[aCurrProject] 为 NULL AND (([ProjectManager].[PerGivenName] LIKE '%test%') OR ([ProjectManager].[PerSurname] LIKE '%test%')) ORDER BY [CompletedDate] ASC'
在我看来还可以,但我显然哪里出错了?
任何帮助表示赞赏。
提前致谢。
【问题讨论】:
标签: sql-server cakephp relationship