10.6. Zend_Db_Table_Row

10.6.1. µµÀÔ

Zend_Db_Table_Row (Àº)´Â,Zend_Db_Table ¿ÀºêÁ§Æ®ÀÇ °³°³ÀÇ ÇàÀ» Æ÷ÇÔÇÑ Å¬·¡½ºÀÔ´Ï´Ù. Å×À̺í Ŭ·¡½º¿¡ ´ëÇØ¼­ Äõ¸®¸¦ ½ÇÇàÇϸé, µ¹·ÁÁÖ¾îÁö´Â °á°ú´Â Zend_Db_Table_Row ¿ÀºêÁ§Æ®¼¼Æ®°¡ µË´Ï´Ù. ÀÌ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇØ »õ·Î¿î ÇàÀ» ÀÛ¼ºÇØ, ±×°ÍÀ» µ¥ÀÌŸº£À̽ºÀÇ Å×ÀÌºí¿¡ Ãß°¡ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

Zend_Db_Table_Row (Àº)´Â, Çà µ¥ÀÌÅÍ °ÔÀÌÆ®¿þÀÌÆÐÅÏÀ» ½ÇÀåÇÑ °ÍÀÔ´Ï´Ù.

10.6.2. ÇàÀÇ Ãëµæ

Zend_Db_Table_Abstract ÇÏ find() (ÀÌ)³ª fetchAll() ±×·¸´Ù°í ÇÏ´Â ¸Þ¼Òµå¸¦ Á¦°øÇÕ´Ï´Ù. À̰͵éÀº °¢°¢ Zend_Db_Table_Rowset ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù. ¶Ç fetchRow() ¸Þ¼Òµå´Â, Zend_Db_Table_Row ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.107. ÇàÀÇ ÃëµæÀÇ ¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow($bugs->select()->where('bug_id = ?'1));

Zend_Db_Table_Rowset ¿ÀºêÁ§Æ®¿¡´Â, º¹¼öÀÇ Zend_Db_Table_Row ¿ÀºêÁ§Æ®°¡ Æ÷ÇԵ˴ϴÙ. Ç×10.7. ¡¸Zend_Db_Table_Rowset¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

·Ê 10.108. Çà ¼¼Æ®³»ÀÇ ÇàÀ» ÀоîµéÀÌ´Â ¿¹


<?php
$bugs 
= new Bugs();
$rowset $bugs->fetchAll($bugs->select()->where('bug_status = ?'1));
$row $rowset->current();

10.6.2.1. ÇàÀ¸·ÎºÎÅÍÀÇ Ä÷³ÀÇ °ªÀÇ Àбâ

Zend_Db_Table_Row_Abstract ¿¡´Â ¾ÆÅ©¼¼»ç°¡ ÀÖ¾î, ÇàÀÇ Ä÷³À» ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼ·Î¼­ ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.

·Ê 10.109. ÇàÀ¸·ÎºÎÅÍ Ä÷³À» ÀоîµéÀÌ´Â ¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow($bugs->select()->where('bug_id = ?'1));

// bug_description Ä÷³ÀÇ °ªÀ» Ãâ·ÂÇÕ´Ï´Ù
echo $row->bug_description;

[ÁÖÀÇ] ÁÖÀÇ

ÃʱâÀÇ ¹öÁ¯ÀÇ Zend_Db_Table_Row ±×·³, ÀÌ·¯ÇÑ ¾ÆÅ©¼¼»ç¸¦ µ¥ÀÌŸº£À̽ºÀÇ Ä÷³°ú ´ëÀÀ½Ãų ¶§¿¡ inflection (º¯Çü) (À¸)·Î ºÒ¸®´Â ¹®ÀÚ¿­ º¯È¯À» ½Ç½ÃÇϰí ÀÖ¾ú½À´Ï´Ù.

ÇöÀçÀÇ Zend_Db_Table_Row ±×·³ º¯ÇüÀ» ½ÇÀåÇϰí ÀÖÁö ¾Ê½À´Ï´Ù. »ç¿ëÇÏ´Â ¾ÆÅ©¼¼»ç¸íÀº, µ¥ÀÌŸº£À̽º³»ÀÇ Ä÷³¸í°ú Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÕ´Ï´Ù.

10.6.2.2. Çà µ¥ÀÌÅÍÀÇ ¹è¿­·Î¼­ÀÇ Ãëµæ

ÇàÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇØ¼­ ¹è¿­·Î¼­ ¾×¼¼½º ÇÏ·Á¸é , Çà ¿ÀºêÁ§Æ®ÀÇ toArray() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº, Ä÷³¸í°ú ±× °ªÀ» °ü·ÃÁöÀº ¿¬»ó ¹è¿­À» µ¹·ÁÁÝ´Ï´Ù.

·Ê 10.110. toArray() ¸Þ¼ÒµåÀÇ »ç¿ë¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow($bugs->select()->where('bug_id = ?'1));

// Çà ¿ÀºêÁ§Æ®·ÎºÎÅÍ Ä÷³¸í/Ä¡ ÀÇ ¿¬»ó ¹è¿­À» ÃëµæÇÕ´Ï´Ù
$rowArray $row->toArray();

// Åë»óÀÇ ¹è¿­°ú °°°Ô »ç¿ëÇÕ´Ï´Ù
foreach ($rowArray as $column => $value) {
    echo 
"Ä÷³: $columnn";
    echo 
"Ä¡:  $valuen";
}

toArray() ÇÏÁö¸¸ µ¹·ÁÁÖ´Â ¹è¿­Àº, °»½ÅÇÒ ¼ö ¾ø½À´Ï´Ù. ¹è¿­³»ÀÇ °ªÀ» º¯°æÇÏ´Â °ÍÀº °¡´ÉÇÕ´Ï´Ù¸¸, ±×°ÍÀ» µ¥ÀÌŸº£À̽º¿¡ º¸Á¸ÇÒ ¼ö ¾ø½À´Ï´Ù.

10.6.2.3. °ü·ÃÇÏ´Â Å×ÀÌºí¿¡¼­ÀÇ µ¥ÀÌÅÍÀÇ Ãëµæ

Zend_Db_Table_Row_Abstract Ŭ·¡½º¿¡´Â, °ü·ÃÇÏ´Â Å×ÀÌºí¿¡¼­ ÇàÀ̳ª Çà ¼¼Æ®¸¦ ÃëµæÇÏ´Â ¸Þ¼Òµå°¡ Á¸ÀçÇÕ´Ï´Ù. Å×À̺íÀÇ ¸±·¹À̼ǿ¡ ´ëÇÑ »ó¼¼ÇÑ Á¤º¸´Â Ç×10.8. ¡¸Zend_Db_Table Relationships¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

10.6.3. µ¥ÀÌŸº£À̽º¿¡ÀÇ ÇàÀÇ ±âÀÔ

10.6.3.1. ÇàÀÇ Ä÷³ÀÇ °ªÀÇ º¯°æ

°³°³ÀÇ Ä÷³ÀÇ °ªÀ» ¾ÆÅ©¼¼»ç·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀº, Ä÷³À» ÀоîµéÀÌ´Â °æ¿ì¿Í °°°í, ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼ¸¦ »ç¿ëÇÕ´Ï´Ù.

Ä÷³ÀÇ ¾ÆÅ©¼¼»ç¿¡ ÀÇÇÑ °ªÀÇ ¼³Á¤Àº, ¾îÇø®ÄÉÀ̼dz»ÀÇ Çà µ¥ÀÌÅÍÀÇ Ä÷³ÀÇ °ªÀº º¯°æÇÕ´Ï´Ù¸¸, ±×°Í¸¸À¸·Î´Â ¾ÆÁ÷ µ¥ÀÌŸº£À̽º¿¡ À§Å¹µÇ°í ÀÖÁö ¾Ê½À´Ï´Ù.À§Å¹ÇÏ·Á¸é save() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.111. ÇàÀÇ Ä÷³ÀÇ ³»¿ëÀ» º¯°æÇÏ´Â ¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow($bugs->select()->where('bug_id = ?'1));

// Çϳª ȤÀº º¹¼öÀÇ Ä÷³ÀÇ °ªÀ» º¯°æÇÕ´Ï´Ù
$row->bug_status 'FIXED';

// µ¥ÀÌŸº£À̽º³»ÀÇ ÇàÀ», »õ·Î¿î °ªÀ¸·Î UPDATE ÇÕ´Ï´Ù
$row->save();

10.6.3.2. »õ·Î¿î ÇàÀÇ »ðÀÔ

ÁöÁ¤ÇÑ Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» ÀÛ¼ºÇÏ·Á¸é , Å×À̺í Ŭ·¡½ºÀÇ createRow() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù. ÃëµæÇÑ ÇàÀÇ Çʵ忡 ´ëÇØ¼­´Â °´Ã¼ ÁöÇâÀÇ ÀÎÅÍÆäÀ̽º·Î ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, save() ¸Þ¼Òµå¸¦ ÄÝ ÇÒ ¶§±îÁö´Â ½ÇÁ¦·Î µ¥ÀÌŸº£À̽ºÀÇ ³»¿ëÀÌ º¯°æµÉ °ÍÀº ¾ø½À´Ï´Ù.

·Ê 10.112. Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» ÀÛ¼ºÇÏ´Â ¿¹


<?php
$bugs 
= new Bugs();
$newRow $bugs->createRow();

// ¾îÇø®ÄÉÀ̼ǿ¡ µû¶ó ÀûÀýÈ÷ Ä÷³ÀÇ °ªÀ» ¼³Á¤ÇÕ´Ï´Ù
$newRow->bug_description '...¼³¸í...';
$newRow->bug_status 'NEW';

// »õ·Î¿î ÇàÀ» µ¥ÀÌŸº£À̽º¿¡ INSERT ÇÕ´Ï´Ù
$newRow->save();

createRow() ¸Þ¼ÒµåÀÇ ¿É¼ÇÀÇ Àμö·Î¼­ ¿¬»ó ¹è¿­À» °Ç³×ÁÙ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¬»ó ¹è¿­¿¡¼­´Â, »õ·Î¿î ÇàÀÇ Çʵ忡 ´ëÀÔÇÏ´Â °ªÀ» ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 10.113. Å×ÀÌºí¿¡ »õ·Î¿î ÇàÀ» ÀÛ¼ºÇØ, °ªÀ» ´ëÀÔÇÏ´Â ¿¹


<?php
$data 
= array(
    
'bug_description' => '...¼³¸í...',
    
'bug_status'      => 'NEW'
);

$bugs = new Bugs();
$newRow $bugs->createRow($data);

// »õ·Î¿î ÇàÀ» µ¥ÀÌŸº£À̽º¿¡ INSERT ÇÕ´Ï´Ù
$newRow->save();

[ÁÖÀÇ] ÁÖÀÇ

Zend_Db_Table ÀÇ ÃʱâÀÇ ¸±¸®½º¿¡¼­´Â,createRow() ¸Þ¼Òµå´Â fetchNew() (ÀÌ)¶ó´Â À̸§À̾ú½À´Ï´Ù. ÇâÈÄ´Â »õ·Î¿î À̸§À» ÀÌ¿ëÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù¸¸, °ú°Å¿ÍÀÇ È£È¯¼ºÀ» È®º¸Çϱâ À§ÇØ(¶§¹®¿¡) ³°Àº À̸§µµ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.

10.6.3.3. º¹¼öÀÇ Ä÷³ÀÇ °ªÀÇ º¯°æ

Zend_Db_Table_Row_Abstract ÀÇ setFromArray() ¸Þ¼Òµå¸¦ »ç¿ëÇϸé, ÇϳªÀÇ ÇàÀÇ º¹¼öÀÇ Ä÷³À» ÇÑ ¹øÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå¿¡´Â, Ä÷³¸íÀ¸·Î °ªÀ» °ü·ÃÁöÀº ¿¬»ó ¹è¿­À» ÁöÁ¤ÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, »õ·Î¿î ÇàÀÇ °ªÀ» ¼³Á¤ÇÏ´Â °æ¿ì³ª ±âÁ¸ÀÇ ÇàÀ» °»½ÅÇÏ´Â °æ¿ìÀÇ ¾îµð¶óµµ À¯¿ëÇϰÚÁö¿ä.

·Ê 10.114. setFromArray() ±×¸®°í »õ·Î¿î ÇàÀÇ °ªÀ» ¼³Á¤ÇÏ´Â ¿¹


<?php
$bugs 
= new Bugs();
$newRow $bugs->createRow();

// µ¥ÀÌÅ͸¦ ¿¬»ó ¹è¿­ Çü½ÄÀ¸·Î ÇÕ´Ï´Ù
$data = array(
    
'bug_description' => '...¼³¸í...',
    
'bug_status'      => 'NEW'
);

// ¸ðµç Ä÷³ÀÇ °ªÀ» ÇÑ ¹øÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù
$newRow->setFromArray($data);

// »õ·Î¿î ÇàÀ» µ¥ÀÌŸº£À̽º¿¡ INSERT ÇÕ´Ï´Ù
$newRow->save();

10.6.3.4. ÇàÀÇ »èÁ¦

Çà ¿ÀºêÁ§Æ®·Î delete() ¸Þ¼Òµå¸¦ ÄÝ ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº, ±× Çà ¿ÀºêÁ§Æ®ÀÇ ÁÖŰ¿¡ ´ëÀÀÇÏ´Â µ¥ÀÌŸº£À̽ºÀÇ ÇàÀ» »èÁ¦ÇÕ´Ï´Ù.

·Ê 10.115. ÇàÀÇ »èÁ¦ÀÇ ¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow('bug_id = 1');

// ÀÌ ÇàÀ» DELETE ÇÕ´Ï´Ù
$row->delete();

º¯°æÀ» Àû¿ëÇϴµ¥ save() (À»)¸¦ ÄÝ ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. À̰ÍÀº, µ¥ÀÌŸº£À̽º¿¡ ´ëÇØ¼­ Áï½Ã¿¡ Àû¿ëµË´Ï´Ù.

10.6.4. ÇàÀÇ ½Ã¸®¾Æ¶óÀÌÁî¿Í º¹¿ø

µ¥ÀÌŸº£À̽ºÀÇ ÇàÀÇ ³»¿ëÀ» º¸Á¸ÇØ µÎ¾î, ³ªÁß¿¡ »ç¿ëÇÏ´Â °ÍÀº Àß ÈçÈ÷ ÀÖ½À´Ï´Ù. ¿ÀºêÁ§Æ®ÀÇ ³»¿ëÀ», ¿ÀÇÁ ¶óÀÎÀ¸·Î º¸Á¸Çϱ⠽¬¿î Çü½Ä (¿¹¸¦ µé¾î ÆÄÀÏ µî) (À¸)·Î º¯È¯Çϴ ó¸®¸¦ ½Ã¸®¾Æ¶óÀÌÁî ±×·¸´Ù°í ÇÕ´Ï´Ù. Zend_Db_Table_Row_Abstract ÇüÅÂÀÇ ¿ÀºêÁ§Æ®´Â, ½Ã¸®¾Æ¶óÀÌÁ ÇÒ ¼ö ÀÖ½À´Ï´Ù.

10.6.4.1. ÇàÀÇ ½Ã¸®¾Æ¶óÀÌÁî

PHP ÀÇ serialize() ÇÔ¼ö¸¦ »ç¿ëÇϰí, Çà ¿ÀºêÁ§Æ®ÀÇ ¾Æ¸£¹ÙÀÌÆ® ½ºÆ®¸²À» Æ÷ÇÔÇÑ ¹®ÀÚ¿­À» ÀÛ¼ºÇÕ´Ï´Ù.

·Ê 10.116. ÇàÀÇ ½Ã¸®¾Æ¶óÀÌÁîÀÇ ¿¹


<?php
$bugs 
= new Bugs();
$row $bugs->fetchRow('bug_id = 1');

// ¿ÀºêÁ§Æ®¸¦ ½Ã¸®¾Æ¶óÀÌÁî ÇÕ´Ï´Ù
$serializedRow serialize($row);

// À̰ÍÀ¸·Î,$serializedRow (À»)¸¦ ÆÄÀÏ µî¿¡ ½á³¾ ¼ö ÀÖ½À´Ï´Ù
                
</programlisting>

            </
example>

        </
sect3>

        <
sect3 id="zend.db.table.row.serialize.unserializing">

            <
title>½Ã¸®¾Æ¶óÀÌÁî ÇÑ Çà µ¥ÀÌÅÍÀÇ º¹¿ø</title>

            <
para>
                
PHP ÀÇ <code>unserialize()</codeÇÔ¼ö¸¦ »ç¿ëÇϰí,
                ¿ÀºêÁ§Æ®ÀÇ ¾Æ¸£¹ÙÀÌÆ® ½ºÆ®¸²À» Æ÷ÇÔÇÑ ¹®ÀÚ¿­À» º¹¿øÇÕ´Ï´Ù.
                ÀÌ ÇÔ¼ö´Â, ¿ø·¡ÀÇ ¿ÀºêÁ§Æ®¸¦ µ¹·ÁÁÝ´Ï´Ù.
            
</para>

            <
para>
                
µ¹·ÁÁÖ¾îÁø Çà ¿ÀºêÁ§Æ®´Â,
                
<emphasis>Á¢¼ÓÀÌ Àý´Ü µÇ¾ú´Ù</emphasis»óÅÂÀÎ °Í¿¡ ÁÖÀÇÇսôÙ.
                Çà ¿ÀºêÁ§Æ®³ª ±× ÇÁ·ÓÆÛƼ¸¦ ÀоîµéÀÏ ¼ö ÀÖ½À´Ï´Ù¸¸,
                ±× °ªÀ» º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù.¶Ç, µ¥ÀÌŸº£À̽º Á¢¼ÓÀ» ÇÊ¿ä·Î ÇÏ´Â ¸Þ¼Òµå
                
(¿¹¸¦ µé¾î Á¾¼Ó Å×ÀÌºí¿¡ ´ëÇÑ Äõ¸® µîµµ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù.
            
</para>

            <
example id="zend.db.table.row.serialize.unserializing.example">

                <
title>½Ã¸®¾Æ¶óÀÌÁî ÇÑ ÇàÀÇ º¹¿øÀÇ ¿¹</title>

                <
programlisting role="php"><![CDATA[<?php
$rowClone 
unserialize($serializedRow);

// À̰ÍÀ¸·Î ¿ÀºêÁ§Æ®ÀÇ ÇÁ·ÓÆÛƼ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, Àбâ Àü¿ëÀÔ´Ï´Ù
echo $rowClone->bug_description;

[ÁÖÀÇ] º¹¿øÇÑ ÇàÀº, ¿Ö Àý´Ü µÈ »óÅÂÀԴϱî?

½Ã¸®¾Æ¶óÀÌÁî ÇÑ ¿ÀºêÁ§Æ®´Â, °¡µ¶Çü½ÄÀÇ ¹®ÀÚ¿­ÀÌ µË´Ï´Ù. µ¥ÀÌŸº£À̽ºÀÇ ¾îÄ«¿îÆ®³ª ÆÐ½º¿öµå¶ó°í ÇÏ´Â Á¤º¸¸¦ ¾ÏȣȭÇÏÁö ¾Ê°í plaintext¿¡ ½Ã¸®¾Æ¶óÀÌÁî ÇØ º¸Á¸Çϸé, ½ÃÅ¥·¯Æ¼»ó ¹®Á¦°¡ µË´Ï´Ù. ±×·¯ÇÑ µ¥ÀÌÅ͸¦ ¹«¹æºñÀÎ »óÅÂ·Î ÅØ½ºÆ® ÆÄÀÏ¿¡ º¸Á¸Çϰųª ÇÏ°í ½ÍÁö´Â ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¶Ç ¸ÞÀϵ¼­ °ø°ÝÀÚ¿¡°Ô µé¿©´Ù ºÁ º¼ ¼ö ÀÖ´Â Àϵµ ÁÁ¾ÆÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ½Ã¸®¾Æ¶óÀÌÁî µÈ ¿ÀºêÁ§Æ®´Â, ¿Ã¹Ù¸¥ ÀÎÁõ Á¤º¸¸¦ ¸ð¸£´Â ÇÑ µ¥ÀÌŸº£À̽º¿¡ ¾×¼¼½º ÇÒ ¼ö ¾ø½À´Ï´Ù.

10.6.4.2. »ê µ¥ÀÌÅͷμ­ÀÇ ÇàÀÇ ºÎȰ

Àý´Ü µÈ ÇàÀÇ Á¢¼ÓÀ» ºÎȰ½ÃŰ·Á¸é , setTable() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.ÀÌ ¸Þ¼Òµå¿¡ÀÇ Àμö·Î¼­´Â, Zend_Db_Table_Abstract ÇüÅÂÀÇ ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇØ °Ç³×ÁÝ´Ï´Ù. Å×ÀÌºí ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇÏ·Á¸é , µ¥ÀÌŸº£À̽º¿ÍÀÇ Á¢¼ÓÀÌ ÇÊ¿äÇÕ´Ï´Ù. ±× Å×À̺í°ú ÇàÀ» °ü·ÃÁþ´Â °ÍÀ¸·Î, ÇàÀÌ µ¥ÀÌŸº£À̽º¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±× ÀÌÈÄ´Â, Çà ¿ÀºêÁ§Æ®ÀÇ °ªÀ» º¯°æÇØ µ¥ÀÌŸº£À̽º¿¡ º¸Á¸ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

·Ê 10.117. ÇàÀÇ ºÎȰÀÇ ¿¹


<?php
$rowClone 
unserialize($serializedRow);

$bugs = new Bugs();

// ÀÌ ÇàÀ» Å×ÀÌºí¿¡ ÀçÁ¢¼ÓÇØ,
// µ¥ÀÌŸº£À̽º¿ÍÀÇ Á¢¼ÓÀ» ºÎȰ½Ãŵ´Ï´Ù
$rowClone->setTable($bugs);

// À̰ÍÀ¸·Î, ÇàÀÇ ³»¿ëÀ» º¯°æÇØ º¸Á¸ÇÒ ¼ö ÀÖ½À´Ï´Ù
$rowClone->bug_status 'FIXED';
$rowClone->save();

10.6.5. Çà Ŭ·¡½ºÀÇ È®Àå

Zend_Db_Table_Row (Àº)´Â,Zend_Db_Table_Row_Abstract (À»)¸¦ °è½ÂÇÑ µðÆúÆ®ÀÇ ±¸»ó Ŭ·¡½ºÀÔ´Ï´Ù.ÀÌ¿ÜÀÇ ±¸»ó Ŭ·¡½º¸¦ »õ·Ó°Ô ÀÛ¼ºÇØ, ±×°ÍÀ» ÀÌ¿ëÇØ ÇàÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. µ¶ÀÚÀûÀÎ Çà Ŭ·¡½º¸¦ ÁöÁ¤ÇÏ·Á¸é , Å×À̺í Ŭ·¡½ºÀÇ protected ¸â¹öÀÌ´Ù $_rowClass (À»)¸¦ »ç¿ëÇÏ´ÂÁö, Å×ÀÌºí ¿ÀºêÁ§Æ®ÀÇ constructor¡¡ ¡¡ ÀÇ ÀμöÀÇ ¹è¿­·Î ÁöÁ¤ÇÕ´Ï´Ù.

·Ê 10.118. µ¶ÀÚÀûÀÎ Çà Ŭ·¡½ºÀÇ ÁöÁ¤


<?php
class MyRow extends Zend_Db_Table_Row_Abstract
{
    
// ...µ¶ÀÚÀûÀΠó¸®
}

// µ¶ÀÚÀûÀÎ ÇàÀ», Å×À̺í Ŭ·¡½ºÀÇ ÀüÀνºÅϽº·Î
// µðÆúÆ®·Î¼­ »ç¿ëÇϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù
class Products extends Zend_Db_Table_Abstract
{
    protected 
$_name 'products';
    protected 
$_rowClass 'MyRow';
}

// È¤Àº, Å×À̺í Ŭ·¡½ºÀÇ Æ¯Á¤ÀÇ ÀνºÅϽº¿¡¼­¸¸
// µ¶ÀÚÀûÀÎ Çà Ŭ·¡½º¸¦ »ç¿ëÇϵµ·Ï(µíÀÌ) ¼³Á¤ÇÕ´Ï´Ù
$bugs = new Bugs(array('rowClass' => 'MyRow'));

10.6.5.1. ÇàÀÇ ÃʱâÈ­

ÇàÀ» ÀÛ¼ºÇÒ ¶§¿¡ ¾îÇø®ÄÉÀÌ¼Ç °íÀ¯ÀÇ ³í¸®¸¦ ÃʱâÈ­ÇÏ°í ½ÍÀº °æ¿ì´Â, ±× ÀÛ¾÷À» init() ¸Þ¼Òµå·Î À̵¿ÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, ÇàÀÇ ¸ÞŸµ¥ÀÌŸÀÇ Ã³¸®°¡ ¸ðµÎ ³¡³­ ÈÄ¿¡ ÄÝ µË´Ï´Ù. ¸ÞŸµ¥ÀÌŸ¸¦ º¯°æÇÒ »ý°¢ÀÌ ¾ø´Ù¸é, __construct ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â °Íº¸´Ùµµ ÀÌÂÊÀÇ ÆíÀ» Ãßõ ÇÕ´Ï´Ù.

·Ê 10.119. init() ¸Þ¼ÒµåÀÇ »ç¿ë¿¹


<?php
class MyApplicationRow extends Zend_Db_Table_Row_Abstract
{
    protected 
$_role;

    protected function 
init()
    {
        
$this->_role = new MyRoleClass();
    }
}


10.6.5.2. Zend_Db_Table_Row ¿¡ À־ÀÇ Insert,Update ¹× Delete ÀÇ µ¶ÀÚ ³í¸®ÀÇ Á¤ÀÇ

Çà Ŭ·¡½º´Â,INSERT (ÀÌ)³ª UPDATE, DELETE ÀÇ Á¶ÀÛ Àü¿¡, ´ëÀÀÇÑ´Ù protected ¸Þ¼Òµå _insert(),_update() ¹× _delete() (À»)¸¦ ÄÝ ÇÕ´Ï´Ù. Çà Ŭ·¡½ºÀÇ ¼­ºê Ŭ·¡½º¿¡¼­, ÀÌ·¯ÇÑ ¸Þ¼Òµå¿¡ µ¶ÀÚ ³í¸®¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ƯÁ¤ÀÇ Å×ÀÌºí¿¡ ´ëÇØ¼­ µ¶ÀÚÀûÀÎ ³í¸®¸¦ ÇÊ¿ä·Î ÇØ, ±×°ÍÀÌ ±× Å×À̺í»óÀÇ ¸ðµç Á¶ÀÛ¿¡ ´ëÇØ¼­ ¹ß»ýÇÑ´Ù¸é, ±× 󸮴 Å×À̺í Ŭ·¡½ºÀÇ insert(),update() ¹× delete() ±×¸®°í ½ÇÀåÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. ±×·¯³ª, µ¶ÀÚÀûÀÎ ³í¸®¸¦ Çà Ŭ·¡½º¿¡¼­ ½ÇÀåÇÏ´Â ÆíÀÌ ÁÁÀº °æ¿ìµµ ÀÖ½À´Ï´Ù.

µ¶ÀÚ ³í¸®ÀÇ ½ÇÀåÀ» Å×À̺í Ŭ·¡½ºº¸´Ù Çà Ŭ·¡½º¿¡¼­ ½Ç½ÃÇÏ´Â ÆíÀÌ ÁÁÀº ¿¹¸¦, ÀÌÇÏ¿¡ ¸î°³Àΰ¡ ³ªÅ¸³» º¸ÀÔ´Ï´Ù.

·Ê 10.120. Çà Ŭ·¡½º¿¡¼­ÀÇ µ¶ÀÚ ³í¸®ÀÇ ¿¹

µ¶ÀÚ ³í¸®°¡, ±× Å×À̺íÀÇ ¸ðµç Á¶ÀÛ¿¡ Àû¿ëµÈ´Ù°í´Â ÇÒ ¼ö ¾ø½À´Ï´Ù. »óȲ¿¡ µû¶ó µ¶ÀÚ ³í¸®¸¦ Àû¿ëÇÏ·Á¸é , ±× ³í¸®¸¦ Çà Ŭ·¡½º¿¡¼­ ½ÇÀåÇØ, ±× Çà Ŭ·¡½º¸¦ ÁöÁ¤ÇØ Å×À̺í Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é, Å×À̺í Ŭ·¡½º´Â µðÆúÆ®ÀÇ Çà Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù.

ÀÌ Å×ÀÌºí¿¡¼­´Â, µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¶ÀÛ ³»¿ëÀ» Zend_Log ¿ÀºêÁ§Æ®¿¡ ±â·ÏÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ´Ù¸¸, ±×°ÍÀº ¾îÇø®ÄÉÀ̼ÇÀÇ ¼³Á¤À¸·Î ·Î±× ±â·ÏÀ» À¯È¿ÇÏ°Ô Çϰí ÀÖ´Â °æ¿ì¸¸À¸·Î ÇÕ´Ï´Ù.


<?php
class MyLoggingRow extends Zend_Db_Table_Row_Abstract
{
    protected function 
_insert()
    {
        
$log Zend_Registry::get('database_log');
        
$log->info(Zend_Debug::dump($this->_data"INSERT: $this->_tableClass"false));
    }
}

// $loggingEnabled (Àº)´Â »ùÇ÷μ­ »ç¿ëÇÏ´Â ÇÁ·ÓÆÛƼ·Î,
// À̰ÍÀº ¾îÇø®ÄÉÀ̼ÇÀÇ ¼³Á¤¿¡ ÀÇÇØ¼­ Á¤ÇØÁö´Â °ÍÀ¸·Î ÇÕ´Ï´Ù
if ($loggingEnabled) {
    
$bugs = new Bugs(array('rowClass' => 'MyLoggingRow'));
} else {
    
$bugs = new Bugs();
}

·Ê 10.121. »ðÀÔÇÏ´Â µ¥ÀÌÅÍÀÇ ±â·ÏÀ» º¹¼öÀÇ Å×À̺í·Î ½Ç½ÃÇÏ´Â Çà Ŭ·¡½ºÀÇ ¿¹

º¹¼öÀÇ Å×À̺í·Î, °øÅëÀÇ µ¶ÀÚ ³í¸®¸¦ »ç¿ëÇϱ⵵ ÇϰÚÁö¿ä. °°Àº ³í¸®¸¦ ¸ðµç Å×À̺í Ŭ·¡½º¿¡¼­ ½ÇÀåÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ±× °æ¿ì´Â ±× µ¿ÀÛÀ» Çà Ŭ·¡½º¿¡¼­ Á¤ÀÇÇսôÙ. ±×¸®°í °¢ Å×À̺í·Î ±× Çà Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù.

ÀÌ ¿¹¿¡¼­´Â, ·Î±× ±â·Ï¿ëÀÇ ÄÚµå´Â ÀüÅ×À̺í Ŭ·¡½º¿¡¼­ µ¿ÀÏÇÕ´Ï´Ù.


<?php
class MyLoggingRow extends Zend_Db_Table_Row_Abstract
{
    protected function 
_insert()
    {
        
$log Zend_Registry::get('database_log');
        
$log->info(Zend_Debug::dump($this->_data"INSERT: $this->_tableClass"false));
    }
}

class 
Bugs extends Zend_Db_Table_Abstract
{
    protected 
$_name 'bugs';
    protected 
$_rowClass 'MyLoggingRow';
}

class 
Products extends Zend_Db_Table_Abstract
{
    protected 
$_name 'products';
    protected 
$_rowClass 'MyLoggingRow';
}

10.6.5.3. Zend_Db_Table_Row ¿¡ À־ÀÇ º¯ÇüÀÇ Á¤ÀÇ

Å×À̺íÀÇ Å¬·¡½º¸íÀ» RDBMS ÀÇ Å×À̺í¸íÀ¸·Î ´ë¸é½Ã۱â À§Çؼ­, inflection (º¯Çü) (À¸)·Î ºÒ¸®´Â ¹®ÀÚ¿­ º¯È¯À» »ç¿ëÇÏ´Â °ÍÀ» ÁÁ¾ÆÇÏ´Â ºÐµµ ÀÖ½À´Ï´Ù.

Zend_Db Ŭ·¡½º±ºÀº, µðÆúÆ®¿¡¼­´Â º¯ÇüÀ» ¼­Æ÷Æ®Çϰí ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ ¹æÄ§¿¡ ´ëÇØ¼­´Â Ç×10.5.12.4. ¡¸Zend_Db_Table ¿¡ À־ÀÇ ¾î¹Ì º¯È­ÀÇ Á¤ÀÇ¡¹ ±×¸®°í ¼³¸íÇϰí ÀÖ½À´Ï´Ù.

º¯ÇüÀ» ½ÃŰ°í ½ÍÀº °æ¿ì´Â, º¯È¯ 󸮸¦ Àڱ⠺δãÀ¸·Î ½ÇÀåÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.±×·¯±â À§Çؼ­´Â, µ¶ÀÚÀûÀÎ Çà Ŭ·¡½º¿¡¼­ _transformColumn() ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å(override) ÇØ, Å×À̺í Ŭ·¡½º¿¡¼­ Äõ¸®¸¦ ½ÇÇàÇÒ ¶§¿¡ ±× µ¶ÀÚÇà Ŭ·¡½º¸¦ »ç¿ëÇÕ´Ï´Ù.

·Ê 10.122. º¯È¯ ó¸®ÀÇ Á¤ÀÇ¿¹

À̰Ϳ¡ ÀÇÇØ, Ä÷³¸íÀ» º¯Çü½ÃŲ °ÍÀ¸·Î ¾×¼¼½º ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. Çà Ŭ·¡½ºÀÇ _transformColumn() ¸Þ¼Òµå¸¦ »ç¿ëÇϰí, µ¥ÀÌŸº£À̽ºÀÇ Å×ÀÌºí³»ÀÇ Ä÷³¸íÀ» º¯°æÇϰí ÀÖ½À´Ï´Ù.


<?php
class MyInflectedRow extends Zend_Db_Table_Row_Abstract
{
    protected function 
_transformColumn($columnName)
    {
        
$nativeColumnName myCustomInflector($columnName);
        return 
$nativeColumnName;
    }
}

class 
Bugs extends Zend_Db_Table_Abstract
{
    protected 
$_name 'bugs';
    protected 
$_rowClass 'MyInflectedRow';
}

$bugs = new Bugs();
$row $bugs->fetchNew();

// Ä¼¸á ÄÉÀ̽º Çü½ÄÀÇ Ä÷³¸íÀ» »ç¿ëÇÕ´Ï´Ù.
// º¯È¯ ÇÔ¼ö¿¡ ÀÇÇØ, À̰ÍÀ» µ¥ÀÌŸº£À̽º³»¿¡¼­ÀÇ ½ÇÁ¦ÀÇ Çü½Ä¿¡
// º¯È¯ÇÕ´Ï´Ù.
$row->bugDescription 'New description';

º¯È¯ ÇÔ¼ö¸¦ ¾²´Â °ÍÀº ´ç½ÅÀÇ ¿ªÇÒÀÔ´Ï´Ù. Zend Framework ±×·³, ±×·¯ÇÑ ÇÔ¼ö´Â ÁغñÇØ ÀÖÁö ¾Ê½À´Ï´Ù.