10.8. Zend_Db_Table Relationships

10.8.1. µµÀÔ

RDB¿¡¼­´Â, Å×ÀÌºí°£ÀÇ °ü·Ã (¸±·¹À̼Ç) ÇÏÁö¸¸ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ¾î´À Å×ÀÌºí³»ÀÇ ¿£Æ¼Æ¼°¡, µ¥ÀÌŸº£À̽º schema·Î Á¤Àǵǰí ÀÖ´Â ÂüÁ¶ Á¤ÇÕ¼º Á¦¾àÀ» »ç¿ëÇØ ´Ù¸¥ ¿£Æ¼Æ¼¿Í ¸µÅ©Çϰí ÀÖ½À´Ï´Ù.

Zend_Db_Table_Row Ŭ·¡½º´Â, ´Ù¸¥ Å×À̺íÀÇ °ü·ÃÇÏ´Â ÇàÀ» ¹®ÀÇÇϱâ À§ÇÑ ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.

10.8.2. ¸±·¹À̼ÇÀÇ Á¤ÀÇ

Ãß»ó Ŭ·¡½º Zend_Db_Table_Abstract (À»)¸¦ °è½ÂÇϰí, °¢ Å×À̺í¿ëÀÇ Å¬·¡½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº Ç×10.5.2. ¡¸Å×À̺í Ŭ·¡½ºÀÇ Á¤ÀÇ¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ. ¶Ç, ÀÌÇÏÀÇ ÄÚµå·Î »ç¿ëÇϰí ÀÖ´Â µ¥ÀÌŸº£À̽ºÀÇ ±¸¼º¿¡ ´ëÇØ¼­´Â Ç×10.1.2. ¡¸»ùÇà µ¥ÀÌŸº£À̽º¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

ÀÌÇÏ¿¡, ÀÌ·¯ÇÑ Å×ÀÌºí¿¡ ´ëÀÀÇÑ´Ù PHP Ŭ·¡½º Á¤ÀǸ¦ ³ªÅ¸³À´Ï´Ù.


<?php
class Accounts extends Zend_Db_Table_Abstract
{
    protected 
$_name            'accounts';
    protected 
$_dependentTables = array('Bugs');
}

class 
Products extends Zend_Db_Table_Abstract
{
    protected 
$_name            'products';
    protected 
$_dependentTables = array('BugsProducts');
}

class 
Bugs extends Zend_Db_Table_Abstract
{
    protected 
$_name            'bugs';

    protected 
$_dependentTables = array('BugsProducts');

    protected 
$_referenceMap    = array(
        
'Reporter' => array(
            
'columns'           => 'reported_by',
            
'refTableClass'     => 'Accounts',
            
'refColumns'        => 'account_name'
        
),
        
'Engineer' => array(
            
'columns'           => 'assigned_to',
            
'refTableClass'     => 'Accounts',
            
'refColumns'        => 'account_name'
        
),
        
'Verifier' => array(
            
'columns'           => array('verified_by'),
            
'refTableClass'     => 'Accounts',
            
'refColumns'        => array('account_name')
        )
    );
}

class 
BugsProducts extends Zend_Db_Table_Abstract
{
    protected 
$_name 'bugs_products';

    protected 
$_referenceMap    = array(
        
'Bug' => array(
            
'columns'           => array('bug_id'),
            
'refTableClass'     => 'Bugs',
            
'refColumns'        => array('bug_id')
        ),
        
'Product' => array(
            
'columns'           => array('product_id'),
            
'refTableClass'     => 'Products',
            
'refColumns'        => array('product_id')
        )
    );

}

Zend_Db_Table ±×¸®°í UPDATE (ÀÌ)³ª DELETE ÀÇ ¿¬¼â Á¶ÀÛÀ»¿¡¹Â·¹ÀÌÆ® ÇÏ´Â °æ¿ì´Â, ¹è¿­ $_dependentTables (À»)¸¦ Ä£Å×À̺í·Î ¼±¾ðÇØ, Á¾¼ÓµÇ°í ÀÖ´Â Å×À̺íÀ» °Å±â¼­ ÁöÁ¤ÇÕ´Ï´Ù. SQL (À¸)·ÎÀÇ Å×À̺í¸íÀÌ ¾Æ´Ï°í, Ŭ·¡½º¸íÀ» »ç¿ëÇϵµ·Ï ÇսôÙ.

[ÁÖÀÇ] ÁÖÀÇ

RDBMS ¼­¹ö°¡ ½ÇÀåÇϰí ÀÖ´Â ÂüÁ¶ Á¤ÇÕ¼º Á¦¾à¿¡ ÀÇÇØ¼­ ¿¬¼â Á¶ÀÛÀ» ½Ç½ÃÇÏ´Â °æ¿ì´Â, $_dependentTables (À»)¸¦ ¼±¾ðÇÏÁö ¾Ê½À´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº Ç×10.8.6. ¡¸±âÀÔ Á¶ÀÛÀÇ ¿¬¼â¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

°¢ Á¾¼Ó Å×À̺íÀÇ Å¬·¡½º³»¿¡¼­, ¹è¿­ $_referenceMap (À»)¸¦ ¼±¾ðÇÕ´Ï´Ù.À̰ÍÀº, ÂüÁ¶ÀÇ "·ê" (À»)¸¦ Á¤ÀÇÇÏ´Â ¿¬»ó ¹è¿­ÀÌ µË´Ï´Ù. ÂüÁ¶ ·êÀ̶õ, ¸±·¹À̼ÇÀÇ Ä£Å×À̺íÀÌ ¹«¾ùÀÌ µÇ´ÂÁö, Á¾¼Ó Å×À̺íÀÇ ¾î´À Ä÷³°ú Ä£Å×À̺íÀÇ ¾î´À Ä÷³ÀÌ ´ëÀÀÇÏ´ÂÁö¸¦ ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.

·êÀÇ Å°¸¦, ¹è¿­ $_referenceMap ÀÇ À妽º·Î¼­ »ç¿ëÇÕ´Ï´Ù. ÀÌ ·êÀÇ Å°´Â, °¢ ¸±·¹À̼ÇÀ» ÁöÁ¤ÇÒ ¶§¿¡ »ç¿ëÇÕ´Ï´Ù. ¾Ë±â ½¬¿î À̸§À» ºÙÀ̵µ·Ï ÇսôÙ. ³ªÁß¿¡ º¸½Ãµµ·Ï(µíÀÌ),PHP ÀÇ ¸Þ¼Òµå¸íÀÇ ÀϺθ¦ »ç¿ëÇϸé ÁÁÀ» °ÍÀÔ´Ï´Ù.

À§ÀÇ »ùÇà PHP Äڵ忡¼­´Â,Bugs Å×À̺í Ŭ·¡½ºÀÇ ·êÀÇ Å°´Â 'Reporter', 'Engineer', 'Verifier' ¹× 'Product' µË´Ï´Ù.

¹è¿­ $_referenceMap ÀÇ °¢ ·ê ¿£Æ®¸®ÀÇ ³»¿ëµµ ¶Ç, ¿¬»ó ¹è¿­ÀÔ´Ï´Ù. ÀÌ ·ê ¿£Æ®¸®ÀÇ ³»¿ë¿¡ ´ëÇØ¼­, ÀÌÇÏ·Î ¼³¸íÇÕ´Ï´Ù.

  • columns => ¹®ÀÚ¿­ ȤÀº ¹®ÀÚ¿­ÀÇ ¹è¿­·Î, Á¾¼Ó Å×ÀÌºí³»¿¡¼­ÀÇ ¿ÜºÎ Ű¿­ÀÇ À̸§À» ÁöÁ¤ÇÕ´Ï´Ù.

    ´ëºÎºÐÀÇ °æ¿ì´Â Ä÷³Àº Çϳª »ÓÀÔ´Ï´Ù¸¸, º¹¼ö Ä÷³ÀÇ Å°°¡ µÇ´Â Å×ÀÌºíµµ ÀÖ½À´Ï´Ù.

  • refTableClass => Ä£Å×À̺íÀÇ Å¬·¡½º¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù. SQL Å×À̺íÀÇ ¹°¸®ÀûÀÎ À̸§ÀÌ ¾Æ´Ï°í, Ŭ·¡½º¸íÀ» »ç¿ëÇÕ´Ï´Ù.

    Åë»óÀº, Á¾¼Ó Å×ÀÌºí¿¡¼­ Ä£Å×ÀÌºí¿¡ÀÇ ÂüÁ¶´Â Çϳª¸¸À¸·Î µË´Ï´Ù. ±×·¯³ª, Å×ÀÌºí¿¡ µû¶ó¼­´Â µ¿ÀÏÇÑ Ä£Å×ÀÌºí¿¡ÀÇ ÂüÁ¶¸¦ º¹¼ö °¡Áö´Â °Íµµ ÀÖ½À´Ï´Ù. »ùÇÃÀÇ µ¥ÀÌŸº£À̽º¿¡¼­´Â, bugs Å×ÀÌºí¿¡¼­ products Å×ÀÌºí¿¡ÀÇ ÂüÁ¶´Â Çϳª »ÓÀÔ´Ï´Ù. ±×·¯³ª,bugs Å×ÀÌºí¿¡¼­ accounts Å×ÀÌºí¿¡ÀÇ ÂüÁ¶´Â ¼¼ °³ ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ÂüÁ¶¸¦, ¹è¿­ $_referenceMap ÀÇ °³º°ÀÇ ¿£Æ®¸®·Î ÇÕ´Ï´Ù.

  • refColumns => ¹®ÀÚ¿­ ȤÀº ¹®ÀÚ¿­ÀÇ ¹è¿­·Î, Ä£Å×À̺íÀÇ ÁÖŰÀÇ Ä÷³¸íÀ» ÁöÁ¤ÇÕ´Ï´Ù.

    ´ëºÎºÐÀÇ °æ¿ì´Â Ä÷³Àº Çϳª »ÓÀÔ´Ï´Ù¸¸, º¹¼ö Ä÷³ÀÇ Å°°¡ µÇ´Â Å×ÀÌºíµµ ÀÖ½À´Ï´Ù. º¹¼ö Ä÷³ÀÇ Å°¸¦ »ç¿ëÇÏ´Â °æ¿ì´Â, 'columns' ¿£Æ®¸®·ÎÀÇ Ä÷³ÀÇ Â÷·Ê¿Í 'refColumns' ¿£Æ®¸®·ÎÀÇ Ä÷³ÀÇ Â÷·Ê°¡ ÀÏÄ¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

    ÀÌ ¿ä¼ÒÀÇ ÁöÁ¤Àº Çʼö°¡ ¾Æ´Õ´Ï´Ù. refColumns (À»)¸¦ »ý·« ÇßÀ» °æ¿ì´Â, Ä£Å×À̺íÀÇ ÁÖŰ Ä÷³À» µðÆúÆ®·Î »ç¿ëÇÕ´Ï´Ù.

  • onDelete => Ä£Å×À̺íÀÇ ÇàÀÌ »èÁ¦µÇ¾úÀ» ¶§¿¡ ½ÇÇàÇÏ´Â µ¿ÀÛÀ» ÁöÁ¤ÇÕ´Ï´Ù.ÀÚ¼¼ÇÑ °ÍÀº "Ç×10.8.6. ¡¸±âÀÔ Á¶ÀÛÀÇ ¿¬¼â¡¹" (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

  • onUpdate => Ä£Å×À̺í·Î ÁÖŰ Ä÷³ÀÇ °ªÀÌ °»½ÅµÇ¾úÀ» ¶§¿¡ ½ÇÇàÇÏ´Â µ¿ÀÛÀ» ÁöÁ¤ÇÕ´Ï´Ù.ÀÚ¼¼ÇÑ °ÍÀº "Ç×10.8.6. ¡¸±âÀÔ Á¶ÀÛÀÇ ¿¬¼â¡¹" (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

10.8.3. Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ

Ä£Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ Row ¿ÀºêÁ§Æ®·Î¼­ ÃëµæÇϸé, ±× ÇàÀ» ÂüÁ¶Çϰí ÀÖ´Â Á¾¼Ó Å×À̺íÀÇ ÇàÀ» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÇÏ´Â ¸Þ¼Òµå´Â, ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù.


$row->findDependentRowset($table, [$rule]);

ÀÌ ¸Þ¼Òµå´Â Zend_Db_Table_Rowset_Abstract ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù. ±× Áß¿¡´Â, Á¾¼Ó Å×À̺í $table ÀÇ Çà °¡¿îµ¥,$row ÇÏÁö¸¸ °¡¸®Å°´Â ÇàÀ» ÂüÁ¶Çϰí ÀÖ´Â °ÍÀÌ Æ÷ÇԵ˴ϴÙ.

ÃÖÃÊÀÇ Àμö $table ¿¡´Â, Á¾¼Ó Å×À̺íÀÇ Å¬·¡½º¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¹®ÀÚ¿­ÀÌ ¾Æ´Ï°í, Å×À̺í Ŭ·¡½ºÀÇ ¿ÀºêÁ§Æ®·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

·Ê 10.134. Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â,Accounts Å×ÀÌºí¿¡¼­ ÃëµæÇÑ Çà ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­, ±× »ç¶÷ÀÌ º¸°íÇÑ ¹ö±×¸¦ Bugs Å×ÀÌºí¿¡¼­ ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù.


<?php
$accountsTable      
= new Accounts();
$accountsRowset     $accountsTable->find(1234);
$user1234           $accountsRowset->current();

$bugsReportedByUser $user1234->findDependentRowset('Bugs');

µÎ¹øÂ°ÀÇ Àμö $rule (Àº)´Â ¿É¼ÇÀÔ´Ï´Ù. À̰ÍÀº, Á¾¼Ó Å×À̺í Ŭ·¡½ºÀÇ ¹è¿­ $_referenceMap (À¸)·ÎÀÇ ·êÀÇ Å°ÀÇ À̸§À» ÁöÁ¤ÇÕ´Ï´Ù. ·êÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ¹è¿­ Áß(¾È)¿¡¼­ ±× Ä£Å×À̺íÀ» ÂüÁ¶Çϰí ÀÖ´Â ÃÖÃÊÀÇ ·êÀ» »ç¿ëÇÕ´Ï´Ù. ÃÖÃÊÀÇ °Í ÀÌ¿ÜÀÇ ·êÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì´Â, ۸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

À§ÀÇ ¿¹ÀÇ Äڵ忡¼­´Â, ·êÀÇ Å°¸¦ ÁöÁ¤ÇØ ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, Ä£Å×ÀÌºí¿¡ ¸ÅÄ¡ÇÏ´Â ÃÖÃÊÀÇ ·êÀ» µðÆúÆ®·Î »ç¿ëÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â 'Reporter' ÇÏÁö¸¸ °Å±â¿¡ ¸ÂÀ¾´Ï´Ù.

·Ê 10.135. ·êÀ» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â,Accounts Å×ÀÌºí¿¡¼­ ÃëµæÇÑ Çà ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­, ¼öÁ¤ ´ã´çÀÚ°¡ ±× »ç¶÷ÀÌ µÇ¾î ÀÖ´Â ¹ö±×¸¦ Bugs Å×ÀÌºí¿¡¼­ ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù.ÀÌ ¿¹¿¡ À־ÀÇ, ÀÌ ¸±·¹À̼ǿ¡ ´ëÀÀÇÏ´Â ÂüÁ¶ ·êÀÇ Å°´Â 'Engineer' ÀÔ´Ï´Ù.


<?php
$accountsTable      
= new Accounts();
$accountsRowset     $accountsTable->find(1234);
$user1234           $accountsRowset->current();

$bugsAssignedToUser $user1234->findDependentRowset('Bugs''Engineer');

Á¶°ÇÀ̳ª ÁÙ¼­ ¼ø¼­ÀÇ ÁöÁ¤, Çà¼öÀÇ Á¦ÇÑÀ» Ãß°¡ÇÏ·Á¸é , ºÎ¸ðÀÇ ÇàÀÇ select ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.136. Zend_Db_Table_Select ¿¡ ÀÇÇÑ Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â Accounts Å×ÀÌºí¿¡¼­ Çà ¿ÀºêÁ§Æ®¸¦ ÃëµæÇØ, ¼öÁ¤ ´ã´çÀÚ°¡ ±× »ç¶÷ÀÌ´Ù Bugs (À»)¸¦ ã¾Æ, ÃÖ´ë 3 °Ç±îÁö¸¦ À̸§ÀÇ ¼ø¼­¿¡ ÃëµæÇÕ´Ï´Ù.


<?php
$accountsTable      
= new Accounts();
$accountsRowset     $accountsTable->find(1234);
$user1234           $accountsRowset->current();
$select             $accountsTable->select()->order('name ASC')
                                              ->
limit(3);

$bugsAssignedToUser $user1234->findDependentRowset('Bugs''Engineer'$select);


´Ù¸¥ ¹æ¹ýÀ¸·Î¼­"¸ÅÁ÷ ¸Þ¼Òµå" (À»)¸¦ »ç¿ëÇØ Á¾¼Ó Å×À̺íÀÇ ÇàÀ» ¹®ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ÆÐÅÏÀÇ ¾î´À ÂÊÀΰ¡¿¡ ÇØ´çÇÏ´Â ¸Þ¼Òµå¸¦ Row ¿ÀºêÁ§Æ®·Î ÄÝ Çϸé, Zend_Db_Table_Row_Abstract ÇÏ findDependentRowset('<TableClass>', '<Rule>') ¸Þ¼Òµå¸¦ ½ÇÇàÇÕ´Ï´Ù.

  • $row->find<TableClass>()

  • $row->find<TableClass>By<Rule>()

À§ÀÇ ÆÐÅÏ¿¡ ´ëÇϰí,<TableClass> ¹× <Rule> (Àº)´Â, °¢°¢ Á¾¼Ó Å×À̺íÀÇ Å¬·¡½º¸í, Ä£Å×À̺í°úÀÇ ÂüÁ¶ °ü°è¸¦ ³ªÅ¸³½´Ù Á¾¼Ó Å×À̺íÀÇ ·êÀÇ Å°°¡ µË´Ï´Ù.

[ÁÖÀÇ] ÁÖÀÇ

´Ù¸¥ ¾îÇø®ÄÉÀÌ¼Ç Ã¼Á¦, ¿¹¸¦ µé¾î Ruby on Rails µî¿¡¼­´Â, À̸¥¹Ù "inflection (¾î¹Ì º¯È­)" ±×·¸´Ù°í ÇÏ´Â ±¸Á¶¸¦ ä¿ëÇϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, »ç¿ëÇÏ´Â »óȲ¿¡ µû¶ó ½Äº°ÀÚÀÇ ½ºÆçÀ» º¯°æÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. º°·Î º¹ÀâÇÏ°Ô ¾È µÇ°Ô Çϱâ À§ÇÑ(ÇØ), Zend_Db_Table_Row ±×·³ ÀÌ ±¸Á¶¸¦ Á¦°øÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. ¸Þ¼ÒµåÀÇ Äݽ÷ΠÁöÁ¤ÇÏ´Â Å×À̺íÀÇ ID (ÀÌ)³ª ·êÀÇ Å°´Â, Ŭ·¡½º¸íÀ̳ª ۸í°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

·Ê 10.137. ¸ÅÁ÷ ¸Þ¼ÒµåÀÇ »ç¿ë¿¡ ÀÇÇÑ Á¾¼ÓÇà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, ¹æ±ÝÀüÀÇ ¿¹¿Í °°Àº Á¾¼ÓÇà ¼¼Æ®¸¦ ã¾Æ³»´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. À̹øÀº, Å×À̺í°ú ·êÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¸ÅÁ÷ ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.


<?php
$accountsTable    
= new Accounts();
$accountsRowset   $accountsTable->find(1234);
$user1234         $accountsRowset->current();

// µðÆúÆ®ÀÇ ÂüÁ¶ ·êÀ» »ç¿ëÇÕ´Ï´Ù
$bugsReportedBy   $user1234->findBugs();

// ÂüÁ¶ ·êÀ» ÁöÁ¤ÇÕ´Ï´Ù
$bugsAssignedTo   $user1234->findBugsByEngineer();

10.8.4. ºÎ¸ðÀÇ ÇàÀÇ Ãëµæ

Á¾¼Ó Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ Row ¿ÀºêÁ§Æ®·Î¼­ ÃëµæÇϸé, ±× Á¾¼ÓÇàÀÌ ÂüÁ¶Çϰí Àִ ģÅ×À̺íÀÇ ÇàÀ» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÇÏ´Â ¸Þ¼Òµå´Â, ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù.


$row->findParentRow($table, [$rule]);

Á¾¼Ó Å×ÀÌºí¿¡ ´ëÀÀÇϴ ģÅ×À̺íÀÇ ÇàÀº, Ç×»ó Çϳª »ÓÀÔ´Ï´Ù. µû¶ó¼­, ÀÌ ¸Þ¼Òµå´Â Rowset ¿ÀºêÁ§Æ®´Â ¾Æ´Ï°í Row ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.

ÃÖÃÊÀÇ Àμö $table ¿¡´Â, Ä£Å×À̺íÀÇ Å¬·¡½º¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¹®ÀÚ¿­ÀÌ ¾Æ´Ï°í, Å×À̺í Ŭ·¡½ºÀÇ ¿ÀºêÁ§Æ®·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

·Ê 10.138. ºÎ¸ðÀÇ ÇàÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â,Bugs Å×ÀÌºí¿¡¼­ (¿¹¸¦ µé¾î status ÇÏÁö¸¸ 'NEW' ÀÇ °ÍµîÀÇ) Çà ¿ÀºêÁ§Æ®¸¦ ÃëµæÇØ, ±× ¹ö±×¸¦ º¸°íÇÑ »ç¶÷¿¡°Ô ´ëÀÀÇÏ´Â ÇàÀ» Accounts Å×ÀÌºí¿¡¼­ ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù.


<?php
$bugsTable         
= new Bugs();
$bugsRowset        $bugsTable->fetchAll(array('bug_status = ?' => 'NEW'));
$bug1              $bugsRowset->current();

$reporter          $bug1->findParentRow('Accounts');

µÎ¹øÂ°ÀÇ Àμö $rule (Àº)´Â ¿É¼ÇÀÔ´Ï´Ù. À̰ÍÀº, Á¾¼Ó Å×À̺í Ŭ·¡½ºÀÇ ¹è¿­ $_referenceMap (À¸)·ÎÀÇ ·êÀÇ Å°ÀÇ À̸§À» ÁöÁ¤ÇÕ´Ï´Ù. ·êÀ» ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ¹è¿­ Áß(¾È)¿¡¼­ ±× Ä£Å×À̺íÀ» ÂüÁ¶Çϰí ÀÖ´Â ÃÖÃÊÀÇ ·êÀ» »ç¿ëÇÕ´Ï´Ù. ÃÖÃÊÀÇ °Í ÀÌ¿ÜÀÇ ·êÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì´Â, ۸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

À§ÀÇ ¿¹ÀÇ Äڵ忡¼­´Â, ·êÀÇ Å°¸¦ ÁöÁ¤ÇØ ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, Ä£Å×ÀÌºí¿¡ ¸ÅÄ¡ÇÏ´Â ÃÖÃÊÀÇ ·êÀ» µðÆúÆ®·Î »ç¿ëÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â 'Reporter' ÇÏÁö¸¸ °Å±â¿¡ ¸ÂÀ¾´Ï´Ù.

·Ê 10.139. ·êÀ» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ ºÎ¸ðÀÇ ÇàÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, Å×À̺í Bugs (À¸)·ÎºÎÅÍ ÃëµæÇÑ Çà ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­, ±× ¹ö±×ÀÇ ¼öÁ¤ ´ã´çÀÚÀÇ ¾îÄ«¿îÆ® Á¤º¸¸¦ ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. ÀÌ ¸±·¹À̼ǿ¡ ´ëÀÀÇÏ´Â ÂüÁ¶ ·êÀÇ Å°´Â 'Engineer' ÀÔ´Ï´Ù.


<?php
$bugsTable         
= new Bugs();
$bugsRowset        $bugsTable->fetchAll(array('bug_status = ?''NEW'));
$bug1              $bugsRowset->current();

$engineer          $bug1->findParentRow('Accounts''Engineer');

´Ù¸¥ ¹æ¹ýÀ¸·Î¼­"¸ÅÁ÷ ¸Þ¼Òµå" (À»)¸¦ »ç¿ëÇØ Ä£Å×À̺íÀÇ ÇàÀ» ¹®ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ÆÐÅÏÀÇ ¾î´À ÂÊÀΰ¡¿¡ ÇØ´çÇÏ´Â ¸Þ¼Òµå¸¦ Row ¿ÀºêÁ§Æ®·Î ÄÝ Çϸé, Zend_Db_Table_Row_Abstract ÇÏ findParentRow('<TableClass>', '<Rule>') ¸Þ¼Òµå¸¦ ½ÇÇàÇÕ´Ï´Ù.

  • $row->findParent<TableClass>([Zend_Db_Table_Select $select])

  • $row->findParent<TableClass>By<Rule>([Zend_Db_Table_Select $select])

À§ÀÇ ÆÐÅÏ¿¡ ´ëÇϰí,<TableClass> ¹× <Rule>() (Àº)´Â, °¢°¢ Ä£Å×À̺íÀÇ Å¬·¡½º¸í, Ä£Å×À̺í°úÀÇ ÂüÁ¶ °ü°è¸¦ ³ªÅ¸³½´Ù Á¾¼Ó Å×À̺íÀÇ ·êÀÇ Å°°¡ µË´Ï´Ù

[ÁÖÀÇ] ÁÖÀÇ

¸Þ¼ÒµåÀÇ Äݽ÷ΠÁöÁ¤ÇÏ´Â Å×À̺íÀÇ ID (ÀÌ)³ª ·êÀÇ Å°´Â, Ŭ·¡½º¸íÀ̳ª ۸í°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

·Ê 10.140. ¸ÅÁ÷ ¸Þ¼ÒµåÀÇ »ç¿ë¿¡ ÀÇÇÑ ºÎ¸ðÀÇ ÇàÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, ¹æ±ÝÀüÀÇ ¿¹¿Í °°Àº ºÎ¸ðÀÇ ÇàÀ» ã¾Æ³»´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. À̹øÀº, Å×À̺í°ú ·êÀ» ¹®ÀÚ¿­·Î ÁöÁ¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¸ÅÁ÷ ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.


<?php
$bugsTable         
= new Bugs();
$bugsRowset        $bugsTable->fetchAll(array('bug_status = ?''NEW'));
$bug1              $bugsRowset->current();

// µðÆúÆ®ÀÇ ÂüÁ¶ ·êÀ» »ç¿ëÇÕ´Ï´Ù
$reporter          $bug1->findParentAccounts();

// ÂüÁ¶ ·êÀ» ÁöÁ¤ÇÕ´Ï´Ù
$engineer          $bug1->findParentAccountsByEngineer();

10.8.5. ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀ» »ç¿ëÇÑ Çà ¼¼Æ®ÀÇ Ãëµæ

´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ ´Ù¸¥ ÇÑÂÊÀÇ Å×À̺í (ÀÌ ¿¹¿¡¼­´Â "¿øÅ×À̺í" (ÀÌ)¶ó°í ºÎ¸£±â·Î ÇϰڽÀ´Ï´Ù) ¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ Row ¿ÀºêÁ§Æ®·Î¼­ ÃëµæÇϸé, ÀÌÁ¦(¹ú½á) ÇÑÆíÀÇ Å×À̺í (ÀÌ ¿¹¿¡¼­´Â "´ë»ó Å×À̺í" (ÀÌ)¶ó°í ºÎ¸£±â·Î ÇϰڽÀ´Ï´Ù) ÀÇ ´ëÀÀÇÏ´Â ÇàÀ» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù. »ç¿ëÇÏ´Â ¸Þ¼Òµå´Â, ´ÙÀ½°ú °°ÀÌ µË´Ï´Ù.


$row->findManyToManyRowset($table, $intersectionTable, [$rule1, [$rule2, [Zend_Db_Table_Select $select]]]);

ÀÌ ¸Þ¼Òµå´Â Zend_Db_Table_Rowset_Abstract ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù. ±× Áß¿¡´Â, Å×À̺í $table ÀÇ Çà °¡¿îµ¥, ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀ» ä¿ì´Â °ÍÀÌ Æ÷ÇԵ˴ϴÙ. ¿øÅ×À̺íÀÇ Çà $row (À»)¸¦ »ç¿ëÇØ Áß°£ Å×À̺íÀÇ ÇàÀ» ã¾Æ, ÇÑÃþ ´õ ±×°ÍÀ» ´ë»ó Å×À̺í°ú °áÇÕÇÕ´Ï´Ù.

ÃÖÃÊÀÇ Àμö $table ¿¡´Â, ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ ´ë»ó Å×À̺íÀÇ Å¬·¡½º¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¹®ÀÚ¿­ÀÌ ¾Æ´Ï°í, Å×À̺í Ŭ·¡½ºÀÇ ¿ÀºêÁ§Æ®·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

µÎ¹øÂ°ÀÇ Àμö $intersectionTable ¿¡´Â, ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ Áß°£ Å×À̺íÀÇ Å¬·¡½º¸íÀ» ³ªÅ¸³»´Â ¹®ÀÚ¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ¹®ÀÚ¿­ÀÌ ¾Æ´Ï°í, Å×À̺í Ŭ·¡½ºÀÇ ¿ÀºêÁ§Æ®·Î ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

·Ê 10.141. ´Ù´ë ´ÙÀÇ Çü½ÄÀÇ Çà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, ¿øÅ×À̺í Bugs (À¸)·ÎºÎÅÍ ÃëµæÇÑ Çà ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­, ´ë»ó Å×À̺í Products ÀÇ ÇàÀ» ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. À̰ÍÀº, ±× ¹ö±×¿¡ °ü·ÃÇÏ´Â Á¦Ç°À» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.


<?php
$bugsTable        
= new Bugs();
$bugsRowset       $bugsTable->find(1234);
$bug1234          $bugsRowset->current();

$productsRowset   $bug1234->findManyToManyRowset('Products''BugsProducts');

3¹øÂ°¿Í 4¹øÂ°ÀÇ Àμö $rule1 ¹× $rule2 (Àº)´Â ¿É¼ÇÀÔ´Ï´Ù. À̰ÍÀº, Áß°£ Å×À̺íÀÇ ¹è¿­ $_referenceMap (À¸)·ÎÀÇ ·êÀÇ Å°ÀÇ À̸§À» ³ªÅ¸³»´Â ¹®ÀÚ¿­ÀÔ´Ï´Ù.

$rule1 (Àº)´Â, Áß°£ Å×ÀÌºí¿¡¼­ ¿øÅ×ÀÌºí¿¡ÀÇ ¸±·¹À̼ÇÀ» ³ªÅ¸³½´Ù ·êÀÇ Å°ÀÔ´Ï´Ù.ÀÌ ¿¹¿¡¼­´Â,BugsProducts (À¸)·ÎºÎÅÍ Bugs ¿¡ÀÇ ¸±·¹À̼ÇÀÌ °Å±â¿¡ ¸ÂÀ¾´Ï´Ù.

$rule2 (Àº)´Â, Áß°£ Å×ÀÌºí¿¡¼­ ´ë»ó Å×ÀÌºí¿¡ÀÇ ¸±·¹À̼ÇÀ» ³ªÅ¸³½´Ù ·êÀÇ Å°ÀÔ´Ï´Ù.ÀÌ ¿¹¿¡¼­´Â,Bugs (À¸)·ÎºÎÅÍ Products ¿¡ÀÇ ¸±·¹À̼ÇÀÌ °Å±â¿¡ ¸ÂÀ¾´Ï´Ù.

ºÎ¸ð³ª Á¾¼ÓÇàÀ» ÃëµæÇÏ´Â ¸Þ¼Òµå¿Í °°ÀÌ, ¸¸¾à ·êÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, ¹è¿­ $_referenceMap Áß(¾È)¿¡¼­ ±× ¸±·¹À̼ǿ¡ ÇØ´çÇÏ´Â ÃÖÃÊÀÇ ·êÀ» »ç¿ëÇÕ´Ï´Ù. ÃÖÃÊÀÇ °Í ÀÌ¿ÜÀÇ ·êÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â °æ¿ì´Â, ۸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

À§ÀÇ ¿¹ÀÇ Äڵ忡¼­´Â, ·êÀÇ Å°¸¦ ÁöÁ¤ÇØ ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼­, ¸ÅÄ¡ÇÏ´Â ÃÖÃÊÀÇ ·êÀ» µðÆúÆ®·Î »ç¿ëÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â,$rule1 ÇÏÁö¸¸ 'Reporter', ±×¸®°í $rule2 ÇÏÁö¸¸ 'Product' (ÀÌ)°¡ µË´Ï´Ù.

·Ê 10.142. ·êÀ» ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ ´Ù´ë ´ÙÀÇ Çü½ÄÀÇ Çà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, ¿øÅ×À̺í Bugs (À¸)·ÎºÎÅÍ ÃëµæÇÑ Çà ¿ÀºêÁ§Æ®¿¡ ´ëÇØ¼­, ´ë»ó Å×À̺í Products ÀÇ ÇàÀ» ã´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. À̰ÍÀº, ±× ¹ö±×¿¡ °ü·ÃÇÏ´Â Á¦Ç°À» ³ªÅ¸³»´Â °ÍÀÔ´Ï´Ù.


<?php
$bugsTable        
= new Bugs();
$bugsRowset       $bugsTable->find(1234);
$bug1234          $bugsRowset->current();

$productsRowset   $bug1234->findManyToManyRowset('Products''BugsProducts''Bug');

´Ù¸¥ ¹æ¹ýÀ¸·Î¼­"¸ÅÁ÷ ¸Þ¼Òµå" (À»)¸¦ »ç¿ëÇØ ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ ´ë»ó Å×À̺íÀÇ ÇàÀ» ¹®ÀÇÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ÆÐÅÏÀÇ ¾î´À ÂÊÀΰ¡¿¡ ÇØ´çÇÏ´Â ¸Þ¼Òµå¸¦ ÄÝ Çϸé, Zend_Db_Table_Row_Abstract ÇÏ findManyToManyRowset('<TableClass>', '<IntersectionTableClass>', '<Rule1>', '<Rule2>') ¸Þ¼Òµå¸¦ ½ÇÇàÇÕ´Ï´Ù.

  • $row->find<TableClass>Via<IntersectionTableClass>([Zend_Db_Table_Select $select])

  • $row->find<TableClass>Via<IntersectionTableClass>By<Rule1>([Zend_Db_Table_Select $select])

  • $row->find<TableClass>Via<IntersectionTableClass>By<Rule1>And<Rule2>([Zend_Db_Table_Select $select])

À§ÀÇ ÆÐÅÏ¿¡ ´ëÇϰí,<TableClass> ¹× <IntersectionTableClass> (Àº)´Â, °¢°¢ ´ë»ó Å×À̺íÀÇ Å¬·¡½º¸í ¹× Áß°£ Å×À̺íÀÇ Å¬·¡½º¸íÀÌ µË´Ï´Ù. ¶Ç <Rule1> ¹× <Rule2> (Àº)´Â, °¢°¢ Áß°£ Å×ÀÌºí¿¡¼­ ¿øÅ×À̺í, ÁÖ°£ Å×ÀÌºí¿¡¼­ ´ë»ó Å×ÀÌºí¿¡ÀÇ ÂüÁ¶¸¦ ³ªÅ¸³»´Â ·êÀÇ Å°°¡ µË´Ï´Ù.

[ÁÖÀÇ] ÁÖÀÇ

¸Þ¼ÒµåÀÇ Äݽ÷ΠÁöÁ¤ÇÏ´Â Å×À̺íÀÇ ID (ÀÌ)³ª ·êÀÇ Å°´Â, Ŭ·¡½º¸íÀ̳ª ۸í°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

·Ê 10.143. ¸ÅÁ÷ ¸Þ¼ÒµåÀÇ »ç¿ë¿¡ ÀÇÇÑ ´Ù´ë ´ÙÀÇ Çü½ÄÀÇ Çà ¼¼Æ®ÀÇ Ãëµæ

ÀÌ ¿¹¿¡¼­´Â, Á¦Ç°À¸·ÎºÎÅÍÀÇ ´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ ´ë»ó Å×À̺íÀÇ ÇàÀ» ã¾Æ³»´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. ±× ¹ö±×¿¡ °ü·ÃÇÏ´Â Á¦Ç°À» ã¾Æ³À´Ï´Ù.


<?php
$bugsTable        
= new Bugs();
$bugsRowset       $bugsTable->find(1234);
$bug1234          $bugsRowset->current();

// µðÆúÆ®ÀÇ ÂüÁ¶ ·êÀ» »ç¿ëÇÕ´Ï´Ù
$products          $bug1234->findProductsViaBugsProducts();

// ÂüÁ¶ ·êÀ» ÁöÁ¤ÇÕ´Ï´Ù
$products          $bug1234->findProductsViaBugsProductsByBug();

10.8.6. ±âÀÔ Á¶ÀÛÀÇ ¿¬¼â

[ÁÖÀÇ] µ¥ÀÌŸº£À̽º·ÎÀÇ DRI ÀÇ ¼±¾ð

Zend_Db_Table ÀÇ ¿¬¼â Á¶ÀÛÀ» ¼±¾ðÇÏ´Â °ÍÀº, RDBMS ÇÏÁö¸¸ ¼±¾ð ÂüÁ¶ Á¤ÇÕ¼º (DRI) (À»)¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê´Â °æ¿ì ¸¶¼Å (À»)¸¦ »óÁ¤Çϰí ÀÖ½À´Ï´Ù.

¿¹¸¦ µé¾î,MySQL ÀÇ MyISAM ½ºÅ丮Áö ¿£ÁøÀ̳ª SQLite ±×·³ DRI (À»)¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì´Â,Zend_Db_Table (À¸)·ÎÀÇ ¿¬¼â Á¶ÀÛÀÇ ¼±¾ðÀÌ À¯¿ëÀÌ µÇ°ÚÁö¿ä.

¸¸¾à RDBMS ÇÏÁö¸¸ DRI ÀÇ ON DELETE ±¸ ¹× ON UPDATE ±¸¸¦ ½ÇÀåÇϰí ÀÖ´Ù¸é, µ¥ÀÌŸº£À̽º schema·Î ±×°ÍÀ» ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. Zend_Db_Table ÀÇ ¿¬¼â ±â´ÉÀ» »ç¿ëÇØ¼­´Â ¾ÈµË´Ï´Ù. RDBMS ÇÏÁö¸¸ ½ÇÀåÇÏ´Â ¿¬¼â DRI (À»)¸¦ »ç¿ëÇÏ´Â ÆíÀÌ, µ¥ÀÌŸº£À̽ºÀÇ ÆÛÆ÷¸Õ½º³ª Àϰü¼º, Á¤ÇÕ¼ºÀÇ ¸é¿¡¼­ À¯¸®ÇÕ´Ï´Ù.

¹«¾ùº¸´Ù Áß¿äÇÑ °ÍÀº,RDBMS (¿Í)°ú Zend_Db_Table Ŭ·¡½ºÀÇ ¾çÂÊ ¸ðµÎ·Î µ¿½Ã¿¡ ¿¬¼â Á¶ÀÛÀ» ¼±¾ðÇØ¼± ¾È µÈ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

Ä£Å×ÀÌºí¿¡ ´ëÇØ¼­ UPDATE ȤÀº DELETE (À»)¸¦ ½Ç½ÃÇßÀ» ¶§¿¡, Á¾¼Ó Å×ÀÌºí¿¡ ´ëÇØ¼­ ½Ç½ÃÇÏ´Â Á¶ÀÛÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.144. ¿¬¼â »èÁ¦ÀÇ ¿¹

ÀÌ ¿¹¿¡¼­´Â Products Å×À̺íÀÇ ÇàÀ» »èÁ¦ÇÕ´Ï´Ù. ±× ¶§¿¡,Bugs Å×À̺íÀÇ Á¾¼ÓÇ൵ ÀÚµ¿ÀûÀ¸·Î »èÁ¦Çϵµ·Ï(µíÀÌ) ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.


<?php
$productsTable  
= new Products();
$productsRowset $productsTable->find(1234);
$product1234    $productsRowset->current();

$product1234->delete();
// ÀÚµ¿ÀûÀ¸·Î Bugs Å×ÀÌºí¿¡µµ ¿¬¼âÇØ,
// Á¾¼ÓµÇ´Â ÇàÀÌ »èÁ¦µË´Ï´Ù

°°ÀÌUPDATE ±×¸®°í Ä£Å×À̺íÀÇ ÁÖŰÀÇ °ªÀ» º¯°æÇßÀ» °æ¿ì´Â, Á¾¼Ó Å×À̺íÀÇ ¿ÜºÎ ŰÀÇ °ªµµ ÀÚµ¿ÀûÀ¸·Î »õ·Î¿î °ª¿¡ °»½ÅÇÏ°í ½Í¾îÁö°ÚÁö¿ä. À̰Ϳ¡ ÀÇÇØ, ±× ÂüÁ¶¸¦ ÃֽŠ»óÅ·ΠÇÒ ¼ö ÀÖ½À´Ï´Ù.

¼ø¼­µîÀÇ ±â´ÉÀ» ÀÌ¿ëÇØ ÁÖ۸¦ »ý¼ºÇϰí ÀÖ´Â °æ¿ì´Â, Åë»óÀº ±× °ªÀ» º¯°æÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.±×·¯³ª, ÀÚ¿¬ Ű (À»)¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â, °ªÀÌ ¹Ù²ð °¡´É¼ºµµ ÀÖ½À´Ï´Ù.±×·¯ÇÑ °æ¿ì´Â, Á¾¼Ó Å×ÀÌºí¿¡ ´ëÇØ¼­ ¿¬¼â °»½ÅÀ» ½Ç½ÃÇÒ Çʿ䰡 ÀÖ°ÚÁö¿ä.

Zend_Db_Table ±×¸®°í ¿¬¼â ¸±·¹À̼ÇÀ» ¼±¾ðÇÏ·Á¸é , $_referenceMap Áß(¾È)¿¡¼­ÀÇ ·êÀ» ÆíÁýÇØ, ¿¬»ó ¹è¿­ÀÇ Å° 'onDelete' ¹× 'onUpdate' ¿¡ ¹®ÀÚ¿­ 'cascade' (ȤÀº Á¤¼ö self::CASCADE) (À»)¸¦ ¼³Á¤ÇÕ´Ï´Ù. Ä£Å×ÀÌºí¿¡¼­ ÇàÀÌ »èÁ¦µÇ°Å³ª ÁÖŰÀÇ °ªÀÌ °»½Å µÇ°Å³ª Çϱâ Àü¿¡, ±× ÇàÀ» ÂüÁ¶Çϰí ÀÖ´Â Á¾¼Ó Å×À̺íÀÇ ÇàÀÌ ¿ì¼± »èÁ¦ ȤÀº °»½ÅµË´Ï´Ù.

·Ê 10.145. ¿¬¼â Á¶ÀÛÀÇ ¼±¾ðÀÇ ¿¹

ÀÌÇÏÀÇ ¿¹¿¡¼­´Â,Products Å×À̺íÀÌ ÀÖ´Â ÇàÀÌ »èÁ¦µÇ¾úÀ» ¶§¿¡, ±× ÇàÀ» ÂüÁ¶Çϰí ÀÖ´Ù Bugs Å×À̺íÀÇ ÇàÀÌ ÀÚµ¿ÀûÀ¸·Î »èÁ¦µË´Ï´Ù. ÂüÁ¶ ¸ÊÀÇ ¿£Æ®¸®ÀÇ ¿ä¼Ò 'onDelete' ÇÏÁö¸¸ self::CASCADE (À¸)·Î ¼³Á¤µÇ¾î Àֱ⠶§¹®ÀÔ´Ï´Ù.

ÀÌÇÏÀÇ ¿¹¿¡¼­´Â, ģŬ·¡½ºÀÇ ÁÖŰÀÇ °ªÀÌ º¯°æµÇ¾îµµ ¿¬¼â °»½ÅÀº ÀϾÁö ¾Ê½À´Ï´Ù.À̰ÍÀº, ÂüÁ¶ ¸ÊÀÇ ¿£Æ®¸®ÀÇ ¿ä¼Ò 'onUpdate' ÇÏÁö¸¸ self::RESTRICT (À¸)·Î ¼³Á¤µÇ¾î Àֱ⠶§¹®ÀÔ´Ï´Ù.ÀÌ °ªÀ» self::NO_ACTION (À¸)·Î Çϰųª'onUpdate' ¿£Æ®¸® ÀÚü¸¦ »ý·« Çϰųª ÇØµµ °°Àº °á°ú°¡ µË´Ï´Ù.


<?php
class BugsProducts extends Zend_Db_Table_Abstract
{
    ...
    protected 
$_referenceMap    = array(
        
'Product' => array(
            
'columns'           => array('product_id'),
            
'refTableClass'     => 'Products',
            
'refColumns'        => array('product_id'),
            
'onDelete'          => self::CASCADE,
            
'onUpdate'          => self::RESTRICT
        
),
        ...
    );
}

10.8.6.1. ¿¬¼â Á¶ÀÛ¿¡ °üÇÑ ÁÖÀÇÁ¡

Zend_Db_Table ÇÏÁö¸¸ ½ÇÇàÇÏ´Â ¿¬¼â Á¶ÀÛÀº ¾ÆÅä¹ÍÀÌ ¾Æ´Õ´Ï´Ù.

Áï, ¸¸¾à µ¥ÀÌŸº£À̽º ÀÚ½ÅÀÌ ÂüÁ¶ Á¤ÇÕ¼º Á¦¾àÀ» ½ÇÀåÇϰí ÀÖ´Â °æ¿ì, Zend_Db_Table Ŭ·¡½º°¡ ½ÇÇàÇÑ ¿¬¼â UPDATE ÇÏÁö¸¸ ±× Á¦¾à°ú °æÇÕ ÇØ, ÂüÁ¶ Á¤ÇÕ¼º¿¡ À§¹ÝÇØ ¹ö¸®°Ô µÇ´Â °ÍÀÔ´Ï´Ù. Zend_Db_Table ÀÇ ¿¬¼â UPDATE (À»)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº, µ¥ÀÌŸº£À̽ºÃø¿¡¼­ ÂüÁ¶ Á¤ÇÕ¼º Á¦¾àÀ» ¼³Á¤Çϰí ÀÖÁö ¾Ê´Â °æ¿ì ¸¶¼Å ÀÔ´Ï´Ù.

¿¬¼â DELETE ¿¡ °üÇØ¼­´Â, ÂüÁ¶ Á¤ÇÕ¼º¿¡ À§¹ÝÇØ ¹ö¸± ¿ì·Á´Â º°·Î ¾ø½À´Ï´Ù. Á¾¼ÓÇàÀÇ »èÁ¦´Â, ÂüÁ¶ÇÏ´Â ºÎ¸ðÀÇ ÇàÀÌ »èÁ¦µÇ±â Àü¿¡ ¾ÆÅä¹ÍÀÌ ¾Æ´Ñ 󸮷μ­ ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

±×·¸Áö¸¸,UPDATE ¹× DELETE ÀÇ ¾î´À ÂÊ¿¡ ´ëÇØ¼­µµ, ¾ÆÅä¹ÍÀÌ ¾Æ´Ñ ¹æ¹ýÀ¸·Î µ¥ÀÌÅ͸¦ º¯°æÇϸé, Á¤ÇÕ¼ºÀÌ ¾ø´Â »óÅÂÀÇ µ¥ÀÌÅ͸¦ ´Ù¸¥ À¯Àú¿¡°Ô º¸¿©Á® ¹ö¸°´Ù°í ÇÏ´Â ¸®½ºÅ©°¡ ¹ß»ýÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¾î´À Çà°ú ±× ¸ðµç Á¾¼ÓÇàÀ» »èÁ¦ÇÏ´Â °ÍÀ» »ý°¢ÇսôÙ. ±×Àú Àϼø°£ÀÔ´Ï´Ù¸¸, ¡¸Á¾¼ÓÇàÀº »èÁ¦ÇßÁö¸¸ Ä£ÇàÀº ¾ÆÁ÷ »èÁ¦Çϰí ÀÖÁö ¾Ê´Ù¡¹ ±×·¸´Ù°í ÇÏ´Â »óŸ¦ ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À¸·ÎºÎÅÍ µéÄÑ ¹ö¸± °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ±× Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº, Á¾¼ÓÇàÀÌ ¾ø´Â Ä£ÇàÀ» º¸°í, ±×°ÍÀÌ ÀǵµÇÑ »óÅÂÀÌ´Ù°í »ý°¢ÇϰÚÁö¿ä. Ŭ¶óÀÌ¾ðÆ®°¡ ÀоîµéÀÎ µ¥ÀÌÅͰ¡ º¯°æÀÇ µµÁßÀÇ ¾îÁß°£ÇÑ »óÅÂÀÎ °Í µî, ¾Ë ¹æ¹ýµµ ¾ø½À´Ï´Ù.

¾ÆÅä¹ÍÀÌ ¾Æ´Ñ º¯°æ¿¡ ÀÇÇÑ ¹®Á¦¸¦ °æ°¨ÇÏ·Á¸é , Æ®·£Àè¼Ç(transaction)¸¦ »ç¿ëÇØ ±× º¯°æÀ» ¿Ü¿Í °Ý¸®ÇÕ´Ï´Ù. ±×·¯³ª RDBMS ¿¡ µû¶ó¼­´Â Æ®·£Àè¼Ç(transaction)¸¦ ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê´Â °Íµµ ÀÖ°í, ¾ÆÁ÷ À§Å¹µÇ¾î ÀÖÁö ¾Ê´Ù "´õƼÀÎ" º¯°æÀ» ´Ù¸¥ Ŭ¶óÀÌ¾ðÆ®·ÎºÎÅÍ º¼ ¼ö ÀÖµµ·Ï(µíÀÌ) Çϰí ÀÖ´Â °Íµµ ÀÖ½À´Ï´Ù.

Zend_Db_Table ÀÇ ¿¬¼â 󸮴 Zend_Db_Table (À¸)·ÎºÎÅÍ ¸¶¼Å ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.

Zend_Db_Table Ŭ·¡½º¿¡¼­ Á¤ÀÇÇÑ ¿¬¼â »èÁ¦³ª °»½ÅÀº,Row Ŭ·¡½º¿¡¼­ save() ¸Þ¼Òµå ȤÀº delete() ¸Þ¼Òµå¸¦ ½ÇÇàÇßÀ» ¶§¿¡ Àû¿ëµË´Ï´Ù. ±×·¯³ª, Äõ¸® ÅøÀ̳ª ´Ù¸¥ ¾îÇø®ÄÉÀ̼ǵîÀÇ ´Ù¸¥ ·çÆ®¿¡¼­ µ¥ÀÌÅ͸¦ °»½Å ȤÀº »èÁ¦ÇßÀ» °æ¿ì´Â, ¿¬¼â Á¶ÀÛÀº ¹ß»ýÇÏÁö ¾Ê½À´Ï´Ù.Zend_Db_Adapter Ŭ·¡½ºÀÇ update() ¸Þ¼Òµå³ª delete() ¸Þ¼Òµå¸¦ ½ÇÇàÇß´Ù°í ÇØµµ,Zend_Db_Table ±×¸®°í Á¤ÀÇÇÑ ¿¬¼â Á¶ÀÛÀº ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù.

¿¬¼â INSERT (Àº)´Â ¾ø½À´Ï´Ù.

¿¬¼â INSERT (Àº)´Â ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. Ä£Å×ÀÌºí¿¡ ÇàÀ» Ãß°¡Çϸé, Á¾¼Ó Å×ÀÌºí¿¡ÀÇ ÇàÀÇ Ãß°¡´Â ´Ù¸¥ 󸮷μ­ ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.