【问题标题】:Doctrine - or where?教义——还是在哪里?
【发布时间】:2011-07-29 20:05:45
【问题描述】:

我有以下疑问:

$query = Doctrine_Query::create()
                ->from('Member m')
                    ->where("m.type='1'")
                        ->andWhere("m.name LIKE '%$term%'")
                        ->orWhere("m.surname LIKE '%$term%'")
                        ->orWhere("m.company LIKE '%$term%'")
                        ->orderBy('id DESC');

但它并没有像我想要的那样工作——它忽略了type 列。

我需要的是结果集,其中m.type=1 和此查询中的一些其他字段为LIKE 'something'

【问题讨论】:

    标签: php doctrine


    【解决方案1】:
    $query = Doctrine_Query::create()
      ->from('Member m')
      ->where('m.type = 1 AND m.name LIKE ?', '%'.$term.'%')
      ->orWhere('m.type = 1 AND m.surname LIKE ?', '%'.$term.'%')
      ->orWhere('m.type = 1 AND m.company LIKE ?', '%'.$term.'%')
      ->orderBy('m.id DESC');
    

    您的 OR 条件不包括第一个条件。还建议您对变量使用?,以确保 Doctrine 逃脱它们。

    【讨论】:

      【解决方案2】:

      Tom's answer 是正确的,尽管我喜欢将代码重复/重复保持在最低限度。

      这种方式也应该有效,同时是一种更短、更简洁的方式

      $query = Doctrine_Query::create()
             ->from('Member m')
             ->where('m.type = ?', 1)
             ->andWhere('m.name LIKE :term OR m.surname LIKE :term OR m.company LIKE :term', array(':term' => '%' . $term . '%'))
             ->orderBy('m.id DESC');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-18
        • 1970-01-01
        • 2021-05-25
        • 2013-10-19
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多