使用RedBeanPHP在MySQL中插入一个对象(类出现)

时间:2013-08-23 10:40:13

标签: php mysql orm redbean

上下文

我想要在MySQL数据库中插入对象,因为我不想使用普通代码和PDO完成所有数据库管理,所以我决定尝试使用RedBean PHP ORM。

以下是我的两个对象:

class Profile {
  public $Name;
  public $Description;
  public $Disabled;
  public $ListOfProfileTranslation;
}

class ProfileTranslation {
  public $LanguageCode;
  public $Title;
  public $Description;
}

上面的两个对象在某种意义上是“链接”的,即Profile的ListOfProfileTranslation包含一个“ProfileTranslation”数组

执行和RedBean PHP

我知道RedBean PHP可以帮助它简化数据库上的CRUD操作;我也看到像RedBeanPHP这样的例子独立地声明表和每一列但是我想也许RedBean PHP可以向我展示一些额外的魔法并且如果我传给它一个对象就自己处理它(因为表名,列名称和值,所以我猜测RedBean PHP可以通过某种方式单独处理它,但我可能会弄错。)

所以我可以写一些类似的东西:

    $Profile = R::dispense('Profile');
    $Profile = $itemObject; // where $itemObject is a "Profile" object 
//which already exists in memory
    R::store($Profile);

我知道上面会引发异常并且不会执行但是在数据库管理简化方面还有一些方法可以实现吗?

我是否必须完成以下所有步骤:

$Profile = R::dispense('Profile');

$Profile->Name = $itemObject->Name;
$Profile->Description = $itemObject->Description;
$Profile->Disabled = $itemObject->Disabled;

R::store($Profile);

实现这两个对象并使用RedBean PHP在DB中链接它们的最佳解决方案是什么?根据您的意见?

1 个答案:

答案 0 :(得分:1)

鉴于$ profile和$ translation,您可以像这样链接它们:

$profile->ownTranslation[] = $translation;
R::store($profile);

现在,RedBeanPHP会将翻译连接到配置文件。 至于课程,这个想法是你不需要这些。想象一下,你有这个ProfileTranslation类,你将如何设置属性?使用setter?

$profTrans->setLanguageCode($lang);

然后,为什么不直接设置它们,我们都知道setter不会做很多有用的东西。

$profTrans->language = $lang;

如果你需要某种验证,你可以将它添加到一个类中,但是不需要在类中重新声明属性,写入访问器等。这两个由RedBeanPHP自动“融合”:

 class Model_Translation extends RedBean_SimpleModel {

     public function update() {
        ...validate here, just throw exception if anything is wrong...
     }

 }

而且......你已经完成了。不需要财产声明,不需要访问者,getter,setter ......刚刚完成。

这就是RedBeanPHP的力量。

干杯, 的Gabor