2

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

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

我收到此错误消息

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

我需要在$clientTable对象表中做 2 个过滤器,

任何建议都会对我有用。

4

3 回答 3

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;

您可以使用精确的“与”或“或”,前后不能有空格。

于 2012-10-31T16:43:59.877 回答
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();
  }
于 2012-06-12T06:17:22.283 回答
2

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

Doctrine::getTable('MtCheck')->findOneByIdAndCType($id,$type);

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

我尝试了这两种方法,都对我有用。

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

于 2013-04-24T17:50:03.950 回答