Nextras ORM přístup k jiné entitě z repozitáře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Petr Parolek
- Člen | 455
Ahoj,
v Doctrině mi funguje v metodě repozitářu:
<?php
namespace App\Model\Repositories;
use Nette;
use Kdyby;
class UsersRepository
{
private $em;
private $addressnookRepository;
private $userRepository;
public function __construct(Kdyby\Doctrine\EntityManager $entityManager)
{
$this->em = $entityManager;
$this->addressRepository = $entityManager->getRepository(\App\Model\Entities\Address::class);
$this->userRepository = $entityManager->getRepository(\App\Model\Entities\User::class);
}
public function deleteUser($id)
{
$user = $this->userRepository->find($id);
$address = $this->addressRepository->findBy(Array("user"=>$id));
if($user) {
$this->em->remove($address);
$this->em->remove($user);
$this->em->flush();
}
else {
throw new \Exception("Such user doesn't exist!");
}
}
}
?>
Entity v Nextras Orm
<?php
namespace PPIS;
use Nextras\Orm\Entity\Entity;
/**
* Address
*
* @property int $id {primary}
* @property User $user {m:1 User, oneSided=true}
* @property string $subject
*/
class Address extends Entity
{}
?>
<?php
namespace PPIS;
use Nextras\Orm\Entity\Entity;
use Nextras\Orm\Relationships\OneHasMany;
/**
* user
*
* @property int $id {primary}
* @property string $username
* @property string $password
*/
class User extends Entity
{
}
?>
<?php
namespace PPIS;
use Nextras\Orm\Collection\ICollection;
use Nextras\Orm\Repository\Repository;
/**
* @method User|NULL getById($id)
*/
class UsersRepository extends Repository
{
static function getEntityClassNames()
{
return [User::class];
}
public function deleteUser($id)
{
$user = $this->getById($id);
$address = $this->addresses->findAll(); //tady nevím, co dát správně
if($user) {
bdump($user);
$this->removeAndFlush($address,TRUE);
$this->removeAndFlush($user,TRUE);
}
else {
throw new \Exception("Such user doesn't exist!");
}
}
}
?>
Jak mám přistoupit k adrese a smazat adresu i uživatele prosím?
Editoval ppar (2. 11. 2017 19:28)
- pavelmlejnek
- Člen | 16
K jinému repozitáři se dá dostat třeba takhle:
$this->getModel()->addresses->findAll();
Vyřešit by to asi mohlo jít také pomocí kaskády.
- Petr Parolek
- Člen | 455
Díky, přesně tímto vše bylo, pomohl mi jeden na slacku s kakádami
Editoval ppar (3. 11. 2017 20:23)