magento模型

magento中有两个模型,第一个是Model文件和第二个Model资源文件。模型用于逻辑操作,资源文件用于执行实际的数据库查询。config.xml文件如下配置的:

<global>
   <models>
       <subscribe>
           <class>Test_Subscribe_Model</class>
           <resourceModel>test_subscribe_resource</resourceModel>
       </subscribe>
       <test_subscribe_resource>
           <class>Test_Subscribe_Model_Resource</class>
           <entities>
               <stock>
                   <table>subscribe_stock_item</table>
               </stock>
           </entities>
       </test_subscribe_resource>
   </models>
   <blocks>
       <subscribe>
           <class>Test_Subscribe_Block</class>
       </subscribe>
   </blocks>
   <helpers>
       <subscribe>
           <class>Test_Subscribe_Helper</class>
       </subscribe>
   </helpers>
   <resources>
       <test_subscribe_setup>
           <setup>
               <module>Test_Subscribe</module>
               <class>Test_Subscribe_Model_Resource_Setup</class>
           </setup>
       </test_subscribe_setup>
   </resources>
</global>

上面几个重要的解释:

<entities>
    <stock>
        <table>subscribe_stock_item</table>  <!-- 数据库实体,table内是数据库的名称 -->
    </stock>
</entities>

正如您将要看到的那样,在magento中我们使用不同的标识符引用所有数据库表名称,并且在标记中,我们定义了magento表标识和实际表名之间的关系。例如

"subscribe/stock"=>subscribe_stock_item

接下来我们将创建模型文件:

class Test_Subscribe_Model_Stock extends Mage_Core_Model_Abstract
{
    protected function _construct()
    {
        $this->_init('subscribe/stock');
    }
}

接下来我们需要创建资源文件,我们需要在Model文件夹下创建一个Resource文件夹。

class Test_Subscribe_Model_Resource_Stock  extends Mage_Core_Model_Mysql4_Abstract
{
    protected function _construct()
    {
        $this->_init('subscribe/stock','id');
    }
}

这里重要的是要注意,这里的’subscribe/stock’'是我们在config.xml文件中创建的magento表标识符。'id’是id的名称($idFieldName).

模型的一些函数

继承Mage_Core_Model_Abstract类的magento中的所有模型都具有save(),delete()和load()函数,以及许多其他重要函数。在进入这些功能之前,还有另一个重要的事情需要学习。magento中的每个模型都可以调用任何getter和setter函数。

例如,$ model->setAbc()将起作用,$ model->getAbc()将返回该值。同样,可以完成$ model->setManish(),$ model-> setCreatedDate()。要记住的另一个功能是$ model->getData()。此函数返回一个数组,其中包含通过setter函数在模型中“设置”的所有数组。

如果你想知道如何实现这些setter和getter,它是通过php magic功能完成的。这些是在Varien_Object类中实现的。这些都是操作模型对象的_data。

save()

save()用于在表中执行INSERT操作。因此,在保存模型之前,您需要先设置模型中的所有值。在下面例子中,
第一,

$model = Mage::getModel(‘test/test’);
$model->setTitle(‘test title’);
$model->setName(‘filename’);
$model->save();

第二,

$arr=array('title'=>'test title','name'=>'filename');
$model->setData($arr);

第三,

$model->setData('title','test title');
$model->setData('name','filename');

第四,

$arr=array('title'=>'test title','name'=>'filename');
$model->addData('$arr');  //这个相当于上面第三种

正如您将注意到的,这些与我们的数据库表列相同。这会将所有这些值插入表中的相应列。之后,save()完成。

load()

load(),函数顾名思义,用于从表中读取行并设置模型中的值。
要使加载功能起作用,您需要拥有该表的主键。例如,

$id = 3;
$model = Mage::getModel(‘test/test’)->load($id);
echo $model->getTitle();
print_r($model->getData());
$model->setTitle(‘new title’);
$model->save();

更新表中的现有行,对应update()操作。

delete()

删除,函数将根据主键删除表中的行。因此,如果我们执行$ model-> delete(),它将删除模型中加载的主键的行。

$id = 3;
$model = Mage::getModel(‘test/test’)->load($id);
$model->delete();
_before和_after函数

当我们的模型类继承Mage_Core_Model_Abstract时,我们可以访问模型类中的许多有用函数。我们已经讨论过save(),load()和delete()函数。其他有用的函数有:beforeSave(), afterSave(),_ beforeFoad(),_ afterLoad(),_ beforeFellDelete(),_ afterDelete()。顾名思义,这些函数在各自的操作之前和之后调用。
_beforeSave():在保存模型之前调用。因此,如果您想在保存之前执行验证,可以在此处执行此操作。
例如,如果在保存用户模型之前假设,我们需要检查重复的电子邮件地址。

protected function _beforeSave()
    {
        parent::_beforeSave();
        if($this->getResource()->checkDuplicate($this)){
           throw new Exception('User Email Already Exists');
        }
        return $this;
    }

同样,我们也可以使用其他功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迁就i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值