我正在拿起 PHP Active Record 并处理关联。我有两个使用“Has_Many”和“Belongs_to”(父/子)的相关对象,并在创建新父记录时尝试创建子记录(在本例中为我的“单元”创建“皮肤”)。
class Unit extends ActiveRecord\Model
{
static $has_many = array(
array('skins')
);
}
class Skin extends ActiveRecord\Model
{
static $belongs_to = array(
array('unit')
);
}
我在这里找到了这两个线程: http: //www.phpactiverecord.org/boards/4/topics/153 Activerecord-association:创建新对象(查找类)
所以我的代码目前看起来像:
$unit = new Unit();
$unit->name = 'somename';
$unit->description = 'somedescription';
$skinArray = array('name' => $unit->name.' Default Skin');
$unit->create_skins($skinArray);
$unit->save();
上面的代码没有将新皮肤与数据库或代码中的单元相关联,尽管它 /is/ 在数据库中放置了一个新皮肤记录(unit_id 为 NULL)。使用“build_skins”不会将皮肤记录放入数据库。
我希望有一种方法可以像其他一些 ORM 那样通过模型本身向父模型添加“子”。我能做到这一点的唯一方法是明确地做到这一点:
$unit = new Unit();
$skin = new Skin();
$unit->name = 'somename';
$unit->description = 'somedescription';
$unit->save();
$skin->unit_id = $unit->id;
$skin->name = $unit->name.' Default Skin';
$skin->save();
也许这就是它应该在 PHP ActiveRecord 中完成的方式,而我的期望是错误的。但是我希望有一种方法可以通过不需要先通过显式调用将父级保存到数据库的对象来实现。例如,“Recess”PHP 框架会像这样对单元进行简单调用:$unit->addSkin($skin);