рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЙрдХреНрдЯреНрд░рд┐рди ODM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ

рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯреЗ PHP рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Doctrine ODM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдореБрдЦреНрдп рдХреЛрдб рдЖрдзрд╛рд░ рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдХреИрд╕реЗ Yct2 рдХреЛ Doctrine ODM рдЙрдкрд╡рд╛рд╕ рдХрд┐рдпрд╛ред рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ - рдХрд╣рд╛рдиреА рдмрд╣реБрдд рдердХрд╛рдК рд╣реЛрдЧреА рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧреА рдЬреЛ рдбреЗрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдбреЙрдХреНрдЯреНрд░рд┐рди ODM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред


рд╣рдо рдХрд╣рд╛рдБ рдлрдБрд╕реЗрдВрдЧреЗ


рд▓рдЧрднрдЧ 6 рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдХрд╛рд░реНрдп рд╕реМрдВрдкрд╛: рдПрдХ рдореЛрдиреЛрд▓рд┐рде Yii1рд╕реЗ рдХреЛрдб рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП ред рддреБрд░рдВрдд рдкреВрд░рд╛ рдХрд┐рдпрд╛ рд╣реБрдЖ рдХрд╛рдоред рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рдЪреБрдирд╛, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ YiiрдореБрдЭреЗ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдЖрд╕рдиреНрди рд░рд┐рд▓реАрдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХреА Yii2, рдЬреЛ рдЙрд╕ рд╕рдордп рдмрд╣реБрдд рд╣реА рд╕реНрдЯрд╛рдЗрд▓рд┐рд╢ / рдлреИрд╢рдиреЗрдмрд▓ / рдпреБрд╡рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЬреНрдЮрд╛рди рдиреЗ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред MongoDB рднреА рдлреИрд╢рдиреЗрдмрд▓ рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдереЗ рдФрд░ Yii1рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ Yii2рдерд╛ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд░ рдХрд╛рдлреА рд╕рд░рд▓ рдерд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрд╛рддрд╛рд░ рднрдВрдбрд╛рд░рдг рдореЗрдВ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд░рдЦреЗрдВ, рдЗрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬрд╛рд░реА рдХрд░реЗрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдВрдХ рдХрд░реЗрдВред


рд╕рдордп рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реВрдХреНрд╖реНрдо рд╕реЗрд╡рд╛ рдмрдврд╝рдиреЗ рд▓рдЧреА: рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рд╡рд╛рдпрд░рд╕ рдХреА рдЬрд╛рдБрдЪ, рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рднрдВрдбрд╛рд░рдг (рдПрдХ рд▓рд╛ рд╕реАрдбреАрдПрди) рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╕рдордп рдЬрд▓реНрджреА рд╕реЗ рдЧреБрдЬрд░ рдЧрдпрд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ рднреА рд╣реБрдИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░, рдирдП рд░реБрдЭрд╛рдиреЛрдВ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдХрд╛рд░рдг рднреА, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХрдо рдФрд░ рдХрдо рд╣реЛрддреА рдЧрдИ рдФрд░ рдореИрдВрдиреЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╕реЛрдЪрд╛ред


рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдВрдмреЗрдбреЗрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдереА ред рдЕрд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рдереА рдХрд┐ рдореБрдЭреЗ рджреЗрд╢реА PHPрд╕рд░рдгрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдерд╛ ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реБрдИрдВ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдврд╝рддреА рдЧрдИ, рдпреЗ рд╕рд░рдгрд┐рдпрд╛рдВ рд╣рд░ рдЬрдЧрд╣ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреАрдВ, рд╡реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдИрдВ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рднреВрд▓ рдЧрдпрд╛ рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреА рд╕рдордЭ рдмрд┐рдЧрдбрд╝ рдЧрдИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рд╕реБрдВрджрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рди рдХрд┐ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдордЭрджрд╛рд░ рд╕реЗрдЯ рдЬрд┐рдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдмрд╣реБрдд рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред


PHP 7- , . ActiveRecord Yii2 тАФ "" , , phpdoc. MongoDB, - , - {user_id : '12'}


, . - , Yii2 . , , , , , .



, , MongoDB.
Symfony Doctrine ORM, Doctrine ODM тАФ ORM MongoDB.


Yii2 Symfony , , :
- тАФ , , .
- тАФ ActiveRecord " " Yii2


, ActiveRecord Doctrine ODM, . , ORM .


. Doctrine DocumentManager ( EntityManager Doctrine ORM). " ".


Dependency Injection Container Yii2 , .


Yii2 DataProvider'a. -, CRUD- . " " . , Yii2. , , тАФ , .


, Doctrine UnitOfWork , .



, : DI- , . - , Symfony .


, :


while (!$this->isShuttingDown()) {
    //  Task,  ,     
    //  MANAGED    ,
    //     
    $task = $this->taskProvider->getNextTask();
    try {
        //   -  , ,  
        $this->someService->runTask($task);
    } catch (SomeException $e) {
        //    :       
        //     MANAGED,      
        //       -     
        $this->switchTaskToError($task, $e);
    }
}

, - dirty ( flush() ), , , .


тАФ clear() "" . , , . clear() , , , $this->someService->runTask($task);



, ( , тАФ ), . . , , . , , . .


:


while (!$this->isShuttingDown()) {
    //  ,  , 
    //   -  ,   
    //    detached,      , 
    //      
    $task = $this->taskProvider->getNextTask();
    try {
        //   -     
        $this->someService->runTask($task);
    } catch (SomeException $e) {
        //    ,  -   
        $this->switchTaskToError($task, $e);
    }
}

taskProvider someService , .


merge. runTask() :


public function runTask(Task $task) {
    $dm = $thic->dmFactory->createDocumentManager();
    $task = $dm->merge($task);
    ....
    $task->setStatus(Task::STATUS_OK);
    $dm->flush();
}

switchTaskToError() :


public function switchTaskToError(Task $task, Throwable $) {
    $dm = $this->dmFactory->createDocumentManager();
    $task = $dm->merge($task);
    $task->setStatus(Task::STATUS_ERROR);
    $task->setError($e->getMessage());
    $dm->flush();
}

, $dm .


, , - . , :


$tasks = $this->taskProvider->getProblemTasks();
$dm = $thic->dmFactory->createDocumentManager();
foreach ($tasks as $task) {
     $task = $dm->merge($task);
     $task->setState(..);
}
$dm->flush();

getProblemTasks , , "" , Task merge(). , merge() тАФ .. , .


, , :


$dm = $thic->dmFactory->createDocumentManager();
$tasks = $this->taskProvider->getProblemTasks($dm);
foreach ($tasks as $task) {
     $task->setState(..);
}
$dm->flush();

.


JPA


, Doctrine JPA: , UnitOfWork, (managed, detached ..). JPA , , . , тАФ . (Spring Framework ). JPA , , .


, , . - , , - (? ), ( ). , , .


, hibernate Doctrine.


Doctrine ODM


" doctrine" , - http , , , .


, . , . . , :


$session = $this->sessionManager->createNewSession();
try {
    $dm= $session->getDocumentManager();
    $tasks = $this->taskProvider->getProblemTasks();
    foreach ($tasks as $task) {
        $task->setState(..);
    }
    $dm->flush();
} finally {
    $this->sessionManager->close($session);
}

getProblemTasks


public function getProblemTasks(): array
{
    $repo = $this->sessionManager
                      ->getCurrentSession()
                      ->getDocumentManager()
                      ->getRepository(Task::class);

    return $repo->findBy(['status' => Task::STATUS_ERROR]);
}

, , , , .


:


public function switchTaskToError(Task $task, Throwable $) {
    //   ,  ,    
    $session $this->sessionManager->createNewSession();
    $dm = $session->getDocumentManager();
    try {
        $task = $dm->merge($task);
        $task->setStatus(Task::STATUS_ERROR);
        $task->setError($e->getMessage());
        $dm->flush();
    finally {
        $this->sessionManager->close($session);
    }
}

, , , wrap, , .


, 3 SessionManager


createNewSession тАФ , "" .
getCurrentSession тАФ .
close тАФ


, ( php-ds).


:
createNewSession тАФ , .
getCurrentSession тАФ , , .
close тАФ .


, , , .


wrap, , :


public function switchTaskToError(Task $task, Throwable $) {
    $this->sessionManager->wrapBySession(function(DocumentManager $dm) use ($task, $e) {
        $task = $dm->merge($task);
        $task->setStatus(Task::STATUS_ERROR);
        $task->setError($e->getMessage());
        $dm->flush();
    });
}


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рддреНрд░ рддрдВрддреНрд░ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд┐рдХрд▓рд╛ред рдХрдо рд╕реЗ рдХрдо рдЙрд╕рдиреЗ рд╣рдорд╛рд░реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рдмреЗрд╢рдХ, рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдпрд╣ рдЕрддрд┐рд░реЗрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдХрд▓реНрдкрдирд╛ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ PHP рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


All Articles