在symfony学说中有多个findby

时间:2012-06-12 00:08:48

标签: symfony1 doctrine findby

我需要知道是否有办法做这样的事情:

$customerClient = $clientTable->findByCustomerNumber($this->array_data[$rowIndex]['D']);
$customerClient = $customerClient->findOneByEmpCartera($portfolio);

我收到此错误消息

  

调用未定义的方法Doctrine_Collection :: findOneByEmpCartera()

我需要在$clientTable对象表中进行2次过滤,

任何建议对我都有用。

3 个答案:

答案 0 :(得分:7)

Symfony 1.4实际上可以一次性处理多个字段,但是如何使用这个功能是荒谬的

Doctrine::getTable('MtCheck')->findOneBy('idAndc_type', array($id,$type))

表格

CREATE TABLE `mt_check` (
  `id` int(11) NOT NULL,
  `c_type` int(11) NOT NULL,
  `c_ver` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`,`c_type`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

你可以使用'And'或'Or'确切,并且之前和之后都没有空格。

答案 1 :(得分:4)

你不能这样。

findBy*方法始终返回Doctrine_Collection。并且需要从findBy*对象调用Table方法。

您可以在findBy

中的一个自定义ClientTable中执行此操作
  // you may update relation and/or table name
  public function findOneCustomerByEmpCartera($customer_member, $portfolio)
  {
    $q = $this->createQuery()
      ->from('Client cl')
      ->leftJoin('cl.Customer cu');
      ->where('cl.customer_number = ? AND cu.emp_cartera', array($customer_member, $portfolio));

    return $q->limit(1)->execute()->getFirst();
  }

答案 2 :(得分:2)

Radanmanf的回答帮助我轻松解决了我的问题。 根据这个问题,以下也应该有效。

  

学说:: getTable( 'MtCheck') - > findOneByIdAndCType($ ID,$型);

请注意这里的区别。没有array()作为参数传递。只是价值观。

我尝试了两种方法,但都适合我。

进一步解释 DQL: DOctrine Query Language: Magic Finders