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
+
0
-

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
+
+2
-

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
+
0
-

Díky, přesně tímto vše bylo, pomohl mi jeden na slacku s kakádami

Editoval ppar (3. 11. 2017 20:23)