entity.fromObject( ) メソッドは、object 引数で指定したコンテンツをエンティティに渡します。
注: このメソッドは元のエンティティを書き換えます。
オブジェクトとエンティティ間でのマッピングは属性名で行われます:
- オブジェクトのプロパティがデータクラス内の存在しない場合、それは無視されます。
- データタイプは同じである必要があります。オブジェクトとデータクラス間で型が合致しない場合、4D は可能であればデータを変換しようとし(RELATE MANY参照)、それ以外の場合には属性はそのままになります。
- プライマリーキーはそのまま渡すか、"__KEY" プロパティ(値はプライマリーキー値)で渡すこともできます。エンティティがデータクラス内に存在しない場合、エンティティはentity.save( ) が呼び出された時に渡された値で作成されます。プライマリーキーが渡されなかった場合、エンティティが作成されるときにデータベースのルールに則ってプライマリーキー値が割り当てられます。自動インクリメントはプライマリーキー値がnull の場合にのみ自動計算されます。
object 引数のオブジェクトは、以下の条件のいづれかを満たしている場合にはリレートエンティティを扱うことができます:
- object が外部キーを格納している
- object が、"__KEY"という名前の単一のプロパティを格納しているプロパティオブジェクトを格納しており、その名前がリレートエンティティと同じ名前である
- リレートエンティティが存在しない場合、無視されます。
以下のような$o オブジェクトがある場合:
{
"firstName": "Mary",
"lastName": "Smith",
"salary": 36500,
"birthDate": "1958-10-27T00:00:00.000Z",
"woman": true,
"managerID": 411,// プライマリーキーを持つリレートエンティティ
"employerID": 20 // プライマリーキーを持つリレートエンティティ
}
以下のコードを実行すると、manager と employerというリレートエンティティを持つエンティティを作成します。
C_OBJET($o)
$entity:=ds.Emp.new()
$entity.fromObject($o)
$entity.save()
また、オブジェクトとして提供されたリレートエンティティを使用することもできます:
{
"firstName": "Marie",
"lastName": "Lechat",
"salary": 68400,
"birthDate": "1971-09-03T00:00:00.000Z",
"woman": false,
"employer": {// オブジェクトとして提供されたリレートエンティティ
"__KEY": "21"
},
"manager": {// オブジェクトとして提供されたリレートエンティティ
"__KEY": "411"
}
}