Php 如何按Doctrine2中没有@Column ANOTION的实体的属性进行搜索?

Php 如何按Doctrine2中没有@Column ANOTION的实体的属性进行搜索?,php,orm,doctrine-orm,doctrine,entity,Php,Orm,Doctrine Orm,Doctrine,Entity,我有一个这样的实体,我希望能够做的例子 /** * @ORM\Entity */ class Order extends BaseEntity { // this is trait for @Id use Identifier; /** * @ORM\Column(type="integer") */ protected $costPerUnit; /** * @ORM\Column(type="integer") */ protected $numberOfUnits; // i wa

我有一个这样的实体,我希望能够做的例子

 /**
* @ORM\Entity
*/
class Order extends BaseEntity
{
// this is trait for @Id
use Identifier;

/**
* @ORM\Column(type="integer")
*/
protected $costPerUnit;

/**
* @ORM\Column(type="integer")
*/
protected $numberOfUnits;

// i want to search by this property
protected $totalCost;

public function getTotalCost()
{
 return $this->numberOfUnits * $this->costPerUnit;
}

}

这在教义2中可能吗?或者我会换一种方式吗?

正如我在评论中所说的,很可能你正在努力解决一个本来不应该发生的问题。尽管如此,通过多种方式,使用原则可以将
值映射到属性:找出哪种方法最能解决您的问题

在我看来,您使用的实体比实际使用的实体更多:实体表示数据库中的记录,原则是DBAL。使用实体(或存储库)搜索数据是查询数据库。您可以通过向实体管理器或自定义存储库类添加自定义方法来解决此问题,该类将查询计算所有实体的totalCost值所需的所有数据,并仅返回您需要的数据。或者,使用来自DBAL的连接来查询您要查找的id(例如),然后使用这些值来访问实际的实体。或者,就像我之前说过的:使用聚合字段


您展示的
findonebytottalcost
findBy
示例存在的问题是,第一个示例要求您自己编写一个名为
findonebyttalcost
的方法。使用
findBy
的问题很简单,就是您的参数格式不正确:数组应该是关联的:使用映射的列名作为键,并且这些值是您要查询的:

$orderRepository->findOneByTotalCost('999')
$orderRepository->findBy(['totalCost' => '400']);
是您要找的,而不是
['totalCost',400]
。对于实体本身,您需要添加注释:

是的,从您在文档块中使用的
@ORM\Entity
注释判断,这应该可以做到:

$repo->findBy(
    ['totalCost' => 400]
);
更新表后,您将能够:

/**
 * @ORM\Column(type="string", length=255)
 */
protected $regioun = 'Spain';
不要忘记,这段代码表示DB中的一个表:您可以搜索任何字段,但可以使用索引,这可以通过在类定义的顶部添加注释来实现:

$entities = $repo->findBy(
    ['region' => 'Spain']
);

一如既往:在DB中,索引很重要

正如我在评论中所说,很可能您正在与一个本来不应该发生的问题进行斗争。尽管如此,通过多种方式,使用原则可以将
值映射到属性:找出哪种方法最能解决您的问题

在我看来,您使用的实体比实际使用的实体更多:实体表示数据库中的记录,原则是DBAL。使用实体(或存储库)搜索数据是查询数据库。您可以通过向实体管理器或自定义存储库类添加自定义方法来解决此问题,该类将查询计算所有实体的totalCost值所需的所有数据,并仅返回您需要的数据。或者,使用来自DBAL的连接来查询您要查找的id(例如),然后使用这些值来访问实际的实体。或者,就像我之前说过的:使用聚合字段


您展示的
findonebytottalcost
findBy
示例存在的问题是,第一个示例要求您自己编写一个名为
findonebyttalcost
的方法。使用
findBy
的问题很简单,就是您的参数格式不正确:数组应该是关联的:使用映射的列名作为键,并且这些值是您要查询的:

$orderRepository->findOneByTotalCost('999')
$orderRepository->findBy(['totalCost' => '400']);
是您要找的,而不是
['totalCost',400]
。对于实体本身,您需要添加注释:

是的,从您在文档块中使用的
@ORM\Entity
注释判断,这应该可以做到:

$repo->findBy(
    ['totalCost' => 400]
);
更新表后,您将能够:

/**
 * @ORM\Column(type="string", length=255)
 */
protected $regioun = 'Spain';
不要忘记,这段代码表示DB中的一个表:您可以搜索任何字段,但可以使用索引,这可以通过在类定义的顶部添加注释来实现:

$entities = $repo->findBy(
    ['region' => 'Spain']
);

一如既往:在DB中,索引很重要

正如我在评论中所说,很可能您正在与一个本来不应该发生的问题进行斗争。尽管如此,通过多种方式,使用原则可以将
值映射到属性:找出哪种方法最能解决您的问题

在我看来,您使用的实体比实际使用的实体更多:实体表示数据库中的记录,原则是DBAL。使用实体(或存储库)搜索数据是查询数据库。您可以通过向实体管理器或自定义存储库类添加自定义方法来解决此问题,该类将查询计算所有实体的totalCost值所需的所有数据,并仅返回您需要的数据。或者,使用来自DBAL的连接来查询您要查找的id(例如),然后使用这些值来访问实际的实体。或者,就像我之前说过的:使用聚合字段


您展示的
findonebytottalcost
findBy
示例存在的问题是,第一个示例要求您自己编写一个名为
findonebyttalcost
的方法。使用
findBy
的问题很简单,就是您的参数格式不正确:数组应该是关联的:使用映射的列名作为键,并且这些值是您要查询的:

$orderRepository->findOneByTotalCost('999')
$orderRepository->findBy(['totalCost' => '400']);
是您要找的,而不是
['totalCost',400]
。对于实体本身,您需要添加注释:

是的,从您在文档块中使用的
@ORM\Entity
注释判断,这应该可以做到:

$repo->findBy(
    ['totalCost' => 400]
);
更新表后,您将能够:

/**
 * @ORM\Column(type="string", length=255)
 */
protected $regioun = 'Spain';
不要忘记,这段代码表示DB中的一个表:您可以搜索任何字段,但可以使用索引,这可以通过在类定义的顶部添加注释来实现:

$entities = $repo->findBy(
    ['region' => 'Spain']
);

一如既往:在DB中,索引很重要

正如我在评论中所说,它很可能