2012-08-02 120 views
0

我试图让我的index()函数仅显示属于该个人登录用户的ExpenseClaims。Cakephp查找所有数据库错误

这是函数:

public function index() { 
    $this->ExpenseClaim->recursive = 0; 
    $currentUsersClaims = $this->ExpenseClaim->find('all', array('conditions' => array('ExpenseClaim.user_id ==' => $this->Auth->user('id')))); 
    $this->set('currentUsersClaims', $this->paginate()); 
} 

这是我得到的错误:

数据库错误

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您在您的SQL语法中有错误;检查对应于你的MySQL服务器版本使用附近的“== 3”在1号线

SQL Query: SELECT `ExpenseClaim`.`id`, `ExpenseClaim`.`user_id`, `ExpenseClaim`.`claim_status_id`, `ExpenseClaim`.`created`, `ExpenseClaim`.`modified`, `ExpenseClaim`.`approved`, `ExpenseClaim`.`approved_by`, `ExpenseClaim`.`date_submitted`, `User`.`id`, `User`.`username`, `User`.`password`, `User`.`group_id`, `User`.`name`, `User`.`address`, `User`.`department_id`, `User`.`mileage_rate`, `User`.`created`, `User`.`modified`, `ClaimStatus`.`id`, `ClaimStatus`.`name`, `ClaimStatus`.`created`, `ClaimStatus`.`modified` FROM `expenses`.`expense_claims` AS `ExpenseClaim` LEFT JOIN `expenses`.`users` AS `User` ON (`ExpenseClaim`.`user_id` = `User`.`id`) LEFT JOIN `expenses`.`claim_statuses` AS `ClaimStatus` ON (`ExpenseClaim`.`claim_status_id` = `ClaimStatus`.`id`) WHERE `ExpenseClaim`.`user_id` == 3 

原谅我,因为我可能丢失服用点明显正确的语法手册,但我是很新,蛋糕。

回答

2

首先,错误是因为您使用的双等于==,这在MySQL中是无效的(单个等号会执行)。另外我注意到你正在努力分页这些结果,可以真正地传递你想在PAGINATE查询条件:

$this->set(
    'currentUsersClaims', 
    $this->paginate('ExpenseClaim', array(
     'ExpenseClaim.user_id' => $this->Auth->user('id') 
    )) 
); 

请务必阅读书中的pagination部分。

+0

谢谢 - 完美的工作。你可以exmaple ExpenseClaim.user_id =?位给我。为什么=?而不是仅仅= – 2012-08-02 13:46:42

+0

问号被转义/用数组的第二个变量替换,现在我实际上已经移除了它,因为基本的'var = var'不是必须的,但它需要用于像'BETWEEN starttime AND endTime'。 [在这里阅读fr更多信息](http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions) – Dunhamzzz 2012-08-02 13:54:50

+0

非常感谢您的帮助:) – 2012-08-02 13:57:50

2

==不N_N

查询正确的查询应该是

public function index() { 
    $this->ExpenseClaim->recursive = 0; 
    $currentUsersClaims = $this->ExpenseClaim->find('all', 
       array('conditions' => array('ExpenseClaim.user_id' => $this->Auth->user('id')))); 
    $this->set('currentUsersClaims', $this->paginate()); 
} 

希望这有助于

+0

Ah drat,当然,是在PHP模式!感谢那。然而,函数没有返回所需的结果(尽管错误现在已经消失)。我只想返回属于已登录用户的费用消息 - 你知道我要去哪里吗?谢谢你的帮助 – 2012-08-02 13:42:47

0
'ExpenseClaim.user_id ==' 

应该

ExpenseClaim.user_id = 

编辑:两个答案w^hile我打字.... :)