symfony - Symfony 连接表
问题描述
我对Symfony完全陌生,我正在努力使用查询构建器。
我在多对多关系中有卡实体和交易实体。
card entity: (id, card_number, code)
transaction entity: (id, amount, source, destination)
card_transaction: (card_id, transaction_id)
我想获取具有给定卡号的所有交易。
解决方案
我们通常需要查看这两个实体类的来源。
您是否为CardTransaction
实体创建了存储库类?您可以创建它以获得可重用的查询,如下所示:
<?php
namespace App\Repository;
class CardTransactionRepository extends \Doctrine\ORM\EntityRepository
{
public function findByCardNumber(int $cardNumber): array
{
if ($cardNumber < 1) {
throw new \InvalidArgumentException("Card ID invalid.");
}
$qb = $this->createQueryBuilder("ct")
->leftJoin("ct.card", "c")
->andWhere("c.cardNumber = :cardNumber")
->setParameter("cardNumber", $cardNumber)
;
return $qb->getQuery()->getResult();
}
}
话虽这么说,您正在做的是一个如此简单的查询/操作,您不需要查询构建器来完成它。这正是实体类变得容易的地方,包括 Doctrine 的ArrayCollection
类。
如果您只是在控制器或视图中执行此操作并且已经加载了Card
实体,则您不需要在存储库类中进行查询。假设$card->getCardTransactions()
您已经在Card
. - 再说一次,没有看到Card
和CardTransaction
实体源,我无法准确地告诉你你有(或需要)什么方法名称。
您可以通过控制器中的属性检索Card
实体,card_number
如下所示:
$card = $this->getRepository(Card::class)->findOneByCardNumber($cardNumber);
理想情况下,您应该检查它是否存在,虽然有点像这样:
if (!($cardNumber = intval($cardNumber))) { // Do something better to validate the card number that has been specified, e.g. a `preg_match()`
throw $this->createNotFoundException("Card not specified.");
}
if (!($card = $this->getRepository(Card::class)->findOneByCardNumber($cardNumber))) {
throw $this->createNotFoundException("Card not found.");
}
推荐阅读
- c# - 为什么 NotificationManager notificationManager = (NotificationManager)GetSystemService(LocalNotificationService); 显示错误?
- c# - 具有多个数据库的存储库模式
- javascript - 接收数组并将数组添加到状态
- audiokit - 后端音频套件
- python - 如何将文件从本地文件服务器 (SFTP) 直接移动到 Snowflake?
- c# - 调用按值返回对象的非托管函数
- pyspark - Spark拒绝显式广播加入
- r - 删除 NA 值并将非 NA 值合并到单个列中
- google-sheets - 如何在数组公式中使用固定数组?
- pandas - 类型错误:dtype '
' 不明白