私は PHP Active Record を取り上げ、関連付けを扱っています。「Has_Many」と「Belongs_to」(親/子) を使用する 2 つの関連オブジェクトがあり、新しい親レコードを作成するときに子レコードを作成しようとしています (この場合、「ユニット」の「スキン」を作成します)。
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: create new object (find class)
したがって、私のコードは現在次のようになっています。
$unit = new Unit();
$unit->name = 'somename';
$unit->description = 'somedescription';
$skinArray = array('name' => $unit->name.' Default Skin');
$unit->create_skins($skinArray);
$unit->save();
上記のコードは、新しいスキンをデータベースまたはコード内のユニットに関連付けていませんが、データベースに新しいスキン レコードを配置しています (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 で行われるはずの方法であり、私の期待は間違っています。しかし、最初に明示的な呼び出しで親をDBに保存する必要のないオブジェクトを介してそれを行う方法を望んでいました。たとえば、"Recess" PHP フレームワークは、次のような単純なユニット呼び出しを行います。 $unit->addSkin($skin);