1

语境

我有要插入 MySQL 数据库的对象,并且因为我不想使用带有 PDO 的纯代码来完成所有 DB 管理,所以我决定尝试 RedBean PHP ORM。

以下是我的两个对象:

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

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

上面的 2 个对象以某种方式“链接”,因为 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);

根据您的说法,实现这两个对象并将它们在 DB 中与 RedBean PHP 链接的最佳解决方案是什么?

4

1 回答 1

1

给定一个 $profile 和一个 $translation,你可以像这样链接它们:

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

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

$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 的强大之处。

干杯,加博尔

于 2013-09-15T11:52:16.960 回答