我正在使用MVC和存储库模式开发一个symfony应用程序。 现在,我想要某些使用mysql并调用DatabaseRepository的实体以及其他从api收集并使用ApiRepository的实体。
现在,对于mysql实体,我使用默认的ORM,但对于api实体,我使用食尸鬼来收集其数据。
DatabaseRepository代码段:
/**
* @method Merchant|null find($id, $lockMode = null, $lockVersion = null)
* @method Merchant|null findOneBy(array $criteria, array $orderBy = null)
* @method Merchant[] findAll()
* @method Merchant[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
*/
class MerchantRepository extends ServiceEntityRepository
{
public function __construct(RegistryInterface $registry)
{
parent::__construct($registry, Merchant::class);
}
}
ApiRepository代码段:
/**
* Get a merchant by Id
*
* @param $transaction
* @return Merchant
*/
public function find($id, $lockMode = null, $lockVersion = null) {
if(strpos($id, Merchant::blockchainNameSpace()) !== false) {
$id = explode("#", $id)[1];
}
// Specify API Call
$url = $this->api_url . "Merchant/" . $id;
$merchant = $this->client->get($url, [
'query' => [
'id' => $id,
'filter' => '{"include": "resolve"}',
]
]);
$merchant = $merchant->getBody()->getContents();
$merchant = \GuzzleHttp\json_decode($merchant, true);
$m = $this->convertToMerchant($merchant);
return $m;
}
ConvertToMerchant:
/*
* Convert merchant array to marchant
* @param array $merchant
* return Merchant
*/
public function convertToMerchant(array $merchant) {
$m = new Merchant();
$m->setId($merchant['id']);
$m->setName($merchant['name']); $m->setUsers($this->userRepository()->findByMerchant($merchant['id']));
}
以上,我已经举例说明了我的商家。 现在,我使用mysql的用户与该商家有关系,我想获取该用户拥有的商家列表。
但是,每当我为用户存储库调用find方法时,它都会尝试查找mysql存储库中的所有关系,而不是该类定义的实体存储库。
用户类别:
/**
* @ORM\Entity(repositoryClass="App\Repository\UserDatabaseRepository")
* @ORM\Table(name="user")
*/
class User extends BaseUser implements EntityInterface, UserInterface
{
/**
* @var int
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(type="string", nullable=true)
*/
private $email;
/**
* @var Collection
*
* @ORM\ManyToMany(targetEntity="App\Entity\Merchant", inversedBy="users")
*/
protected $merchants;
}
商人阶层:
/**
* @ORM\Entity(repositoryClass="App\Repository\MerchantApiRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Merchant extends EntityBase
{
/**
* @var int
*
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @var string
*
* @ORM\Column(type="string")
*/
private $name;
/**
* @var User[]
*
* @ORM\ManyToMany(targetEntity="App\Entity\User", mappedBy="merchants")
*/
private $users;
}
现在我期望的是,当我尝试找到用户时,它会从数据库(ID,电子邮件和所有商户ID)中检索用户,并从API存储库中检索商户,因为我指定了Merchant类调用MerchantApiRepository。
但是,相反,它从数据库中检索用户(标识,电子邮件和所有商户ID),并尝试从数据库中检索商户,并给出错误提示,因为它们不存在于数据库中。
我希望它使用商人实体中定义的存储库,但是它似乎使用用户实体中定义的存储库。
如何获取它的功能,以便在检索用户时使用我在Merchant实体中指定的存储库?