【问题标题】:Cakephp Find all DB errorCakephp 查找所有数据库错误
【发布时间】:2012-08-02 13:30:04
【问题描述】:

我正在尝试让我的 index() 函数仅显示属于该个人登录用户的 ExpenseClaims。

这是函数:

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 服务器版本相对应的手册,以在第 1 行的“== 3”附近使用正确的语法

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 

请原谅我,因为我可能遗漏了一些明显的东西,但我对蛋糕很陌生。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    首先,错误是因为您使用了双等号==,这在 MySQL 中无效(单等号可以)。我还注意到您正在尝试对这些结果进行分页,实际上您可以将您想要的条件传递给分页查询:

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

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

    【讨论】:

    • 谢谢 - 效果很好。你能举例说明 ExpenseClaim.user_id = 吗?对我来说。为什么=?而不仅仅是=
    • 问号被转义/替换为数组的第二个变量,我现在实际上已经删除了它,因为基本的var = var 没有必要,但是像BETWEEN starttime AND endTime 这样的东西需要它. Read here fr more info
    【解决方案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());
    }
    

    希望对你有帮助

    【讨论】:

    • 啊,当然,是在php模式下!感谢那。但是,该功能没有返回所需的结果(尽管错误现在消失了)。我只想返回属于已登录用户的费用索赔 - 你知道我哪里出错了吗?感谢您的帮助
    【解决方案3】:
    'ExpenseClaim.user_id =='
    

    应该是

    ExpenseClaim.user_id =
    

    编辑:我打字时有两个答案.... :)

    【讨论】:

      猜你喜欢
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多