엔티티 엔티티 관리자 저장소 서비스 nedir?

3964 단어
셀라말라 벤 알페렌,
예를 들어 엔터티 엔터티 관리자 리포지토리와 서비스가 제공됩니다.

Entity veritabanımız ile kod arasında ilişki kurmamızı sağlayan kalıcı nesneler olarak tanımlanabilir.
Örneğin veritabanımızda user 타블로순다 id , name veage 오래된 바르사얄림. Bu tabloya kodda erişmek için bir entity yazalım.

/**
 * @Entity(repositoryClass="App\Repositories\UserRepository")
 * @Table(name="users")
 */
class User
{
    /**
     * @var int
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string|null
     *
     * @Column(name="name", type="string", length=100, nullable=true)
     */
    private $name;

    /**
     * @var int|null
     *
     * @Column(name="age", type="integer", nullable=true)
     */
    private $age;


bu kısımda tablomuzdaki columnları özellikleri ile tanlımladık. Şimdi ise getters ve setters'larını yazıp entity'mizi hazır hale getireceğiz.

    public function getId(): int
    {
        return $this->id;
    }

    public function setId(int $id): void
    {
        $this->id = $id;
    }

    public function getAge(): ?int
    {
        return $this->age;
    }

    public function setAge(?int $age): void
    {
        $this->age = $age;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(?string $name): void
    {
        $this->name = $name;
    }


EntityManager는 엔티티 관리자가 액세스할 수 있는 도구를 제공하기 위해 사용됩니다.

Oluşturduğumuz User entity'si için bir insert işlemi yapmak istediğimizde

   public  function  insert()
{
        $user = new User();
        $user->setName('alperen');
        $user->setAge('17');
     $this->getEntityManager()->persist($user);
}



EntityManager'n bize sağlamış olduğu sayesinde tablomuz eni bir kayıt ekledik.

Repository temel olarak veritabanı soorgulama işlemlerinin bir merkezden yapılmasını sağlayarak iş katmanına taşınmasını önler ve bu şekilde sorgu ve kod tekrarına engel olmuş olur. Yani asıl amaç veri işlem ve soorgulamaların tekrarlardan kaçınılarak merkezi bir yapıya çekilmesidir.

Repositorylerin en iyi özelliği ise find, findby, findOneBy ve findAll gibi query methodlarına sahip olması.
Örneğin 사용자 tablosundan yaşı 17 olanları listelemek istediğimiz zaman;

$entityManager->getRepository(User::class)->findby([
'age' => 17
]);


Service, general bir görevi gerçekleştirmesi için oluşturduğumuz koddur.

Mesela insert ve update işlemlerinde girilen yaş 18 den küçükse yani çocuk ise sisteme kayıt olmamalı.
bu işlem için hem insert hemde update fonksiyonunda aynı kodu yazmak gerekir.

Bunun yerine bir UserService oluşturup içerisine isChild fonksiyonunu yazalım.

public function isChild($age): bool
{
  if($age > 18) {
    return true;
} else {
   return false;
 }
}


Daha sonra yazdığımız bu kodu kullanalım.

public  function  insert()
{
  /** @var UserService $userService */
   $userService = $this->container->get(UserService::class);

        if($userService->isChild($age))
        {
          $user = new User();
          $user->setName('alperen');
          $user->setAge('17');
          $this->getEntityManager()->persist($user);
         }
}


Aynı işlemi update içinde yaptığımız zaman benzer kodları tekrar tekrar kullanmamış ve daha düzenli bir koda sahip olacağız.

좋은 웹페이지 즐겨찾기