RDB¿¡¼´Â, Å×ÀÌºí°£ÀÇ °ü·Ã (¸±·¹À̼Ç) ÇÏÁö¸¸ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ¾î´À Å×ÀÌºí³»ÀÇ ¿£Æ¼Æ¼°¡, µ¥ÀÌŸº£À̽º schema·Î Á¤Àǵǰí ÀÖ´Â ÂüÁ¶ Á¤ÇÕ¼º Á¦¾àÀ» »ç¿ëÇØ ´Ù¸¥ ¿£Æ¼Æ¼¿Í ¸µÅ©Çϰí ÀÖ½À´Ï´Ù.
Zend_Db_Table_Row Ŭ·¡½º´Â, ´Ù¸¥ Å×À̺íÀÇ °ü·ÃÇÏ´Â ÇàÀ» ¹®ÀÇÇϱâ À§ÇÑ ¸Þ¼Òµå¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.
Ãß»ó Ŭ·¡½º 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 ¼¹ö°¡ ½ÇÀåÇϰí ÀÖ´Â ÂüÁ¶ Á¤ÇÕ¼º Á¦¾à¿¡ ÀÇÇØ¼ ¿¬¼â Á¶ÀÛÀ» ½Ç½ÃÇÏ´Â °æ¿ì´Â,
|
°¢ Á¾¼Ó Å×À̺íÀÇ Å¬·¡½º³»¿¡¼, ¹è¿ $_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. ¡¸±âÀÔ Á¶ÀÛÀÇ ¿¬¼â¡¹" (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.
Ä£Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ 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();
Á¾¼Ó Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ 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();
´Ù´ë ´ÙÀÇ ¸±·¹À̼ÇÀÇ ´Ù¸¥ ÇÑÂÊÀÇ Å×À̺í (ÀÌ ¿¹¿¡¼´Â "¿øÅ×À̺í" (ÀÌ)¶ó°í ºÎ¸£±â·Î ÇϰڽÀ´Ï´Ù) ¿¡ ´ëÇÑ Äõ¸®ÀÇ °á°ú¸¦ 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();
![]() |
µ¥ÀÌŸº£À̽º·ÎÀÇ DRI ÀÇ ¼±¾ð |
---|---|
Zend_Db_Table ÀÇ ¿¬¼â Á¶ÀÛÀ» ¼±¾ðÇÏ´Â °ÍÀº, RDBMS ÇÏÁö¸¸ ¼±¾ð ÂüÁ¶ Á¤ÇÕ¼º (DRI) (À»)¸¦ ¼Æ÷Æ®Çϰí ÀÖÁö ¾Ê´Â °æ¿ì ¸¶¼Å (À»)¸¦ »óÁ¤Çϰí ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î,MySQL ÀÇ MyISAM ½ºÅ丮Áö ¿£ÁøÀ̳ª SQLite ±×·³ DRI (À»)¸¦ ¼Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì´Â,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
),
...
);
}
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
(Àº)´Â ¼Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù.
Ä£Å×ÀÌºí¿¡ ÇàÀ» Ãß°¡Çϸé,
Á¾¼Ó Å×ÀÌºí¿¡ÀÇ ÇàÀÇ Ãß°¡´Â ´Ù¸¥ 󸮷μ ½Ç½ÃÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.