所以我有点卡在上面,我不断收到sql server错误。是的我正在使用mssql服务器:| - 不是我的数据库。
有一点背景,我的关系看起来像这样:
AssetMaintenanceRecord->(属于) - >资产 - >(属于) - >项目 - >(有一个) - > 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],[资产]。[aID] AS [资产 _11],[资产]。[ptCode] AS [Asset_ 12],[资产]。[aNo] AS [资产] _13],[资产]。[aFullCode] AS [Asset_ 14],[资产]。[aDesc] AS [资产 _15],[资产]。[aMake] AS [资产_ 16],[资产]。[aModel] AS [资产 _17],[资产]。[aSerialNo] AS [资产_ 18],[资产]。[aRegNo] AS [资产< / em> _19],CAST(CAST([资产]。[aRegExpDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 20],[资产]。[aActive] AS [资产 _21 ],[资产]。[aIncAssetRpt] AS [Asset_ 22],[资产]。[aIncFinanceRpt] AS [资产 _23],[资产]。[aIsTrailer] AS [Asset_ 24] ,[资产]。[aIsSurveyEquip] AS [资产 _25],[资产]。[aCostedItem] AS [Asset_ 26],[资产]。[aCostedPeriod] AS [资产 _27] ,[资产]。[aWarrantyPeriod] AS [Asset_ 28],[资产]。[aPONo] AS [资产 _29],CAST(CAST([资产]。[aPODate] AS VARCHAR(8000) )AS TEXT)AS [Asset_ 30],CAST(CAST([资产]。[aPOCostExGst] AS VARCHAR(8000))AS TEXT)AS [资产 _31],[资产]。[aQtyStock] AS [Asset_ 32],[资产]。[aQtyInUse] AS [资产 _33],[资产]。[aCurrProject] AS [Asset_ 34],[资产]。[aCurrOperator] AS [资产 _35],[资产] ]。[aStolen] AS [Asset_ 36],CAST(CAST([资产]。[aStolenDate] AS VARCHAR(8000))AS TEXT)AS [资产 _37],[资产]。[aWO ] AS [Asset_ 38],CAST(CAST([资产]。[aWODate] AS VARCHAR(8000))AS TEXT)AS [资产 _39],[资产]。[aSold] AS [资产_ 40],CAST(CAST([资产]。[aSoldDate] AS VARCHAR(8000))AS TEXT)AS [资产 _41],CAST(CAST([资产]。[aSoldPrice] AS VARCHAR( 8000))AS TEXT)AS [Asset_ 42],CAST(CAST([资产]。[aNotes] AS VARCHAR(8000))AS TEXT)AS [资产 _43],CAST(CAST([资产]。[LastModDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 44],CAST(CAST([Asset]。[CreatedDate] AS VARCHAR(8000))AS TEXT)AS [Asset _45],[资产]。[aCat] AS [Asset_ 46],[资产]。[aPoliceRptNo] AS [资产 _47],[资产]。[aRelatedAssetID] AS [Asset_ 48],[资产]。[aRelatedAssetFullCode] AS [资产 _49],[资产]。[aPayMethod] AS [Asset_ 50],[资产]。[aInvoiceNo] A S [资产 _51],CAST(CAST([资产]。[aLastFuelDate] AS VARCHAR(8000))AS TEXT)AS [Asset_ 52],[资产]。[aFuelType] AS [资产< / [em> _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 [CompletedDate] ASC'
对我来说没问题,但我显然在某个地方出错了?
任何帮助表示感谢。
提前致谢。
答案 0 :(得分:0)
ProjectManager未包含在FROM
或JOIN
部分中
但在WHERE
中使用:OR ([ProjectManager].[PerSurname] LIKE