我有两个数据库表,一个是Item,另一个(Unit)代表Item表可用的所有度量单位。在这种情况下, Item表包含Unit表的外键,它充当一对多关系。
使用 Propel ORM,我可以像下面这样加入两个表并获得 json 结果:
$items = ItemQuery::create()
->joinWith('Item.Unit')
->withColumn("CONCAT (Unit.Name,'-',Unit.Label)", "MUnit")
->find()
->toJSON();
输出结果将是:
{
"Items":[
{
"Id":2,
"Code":"M000002",
"Name":"Item 1",
"Price":234,
"UnitId":1,
"Status":true,
"MUnit":"Kilograms-Kg",
"Unit":{
"Id":1,
"Name":"Kilograms",
"Label":"Kg",
"Status":true
}
},
{
"Id":3,
"Code":"M000003",
"Name":"Item 2",
"Price":100,
"UnitId":2,
"Status":true,
"MUnit":"Meter-Mt",
"Unit":{
"Id":2,
"Name":"Meter",
"Label":"Mt",
"Status":true
}
}
]
}
如您所见,列别名MUnit从单元对象到父对象。但我真正需要的是将别名保留在 Unit 对象中,如下所示。
...
"Items":[
{
"Id":2,
"Code":"M000002",
"Name":"Item 1",
"Price":234,
"UnitId":1,
"Status":true,
"Unit":{
"Id":1,
"Name":"Kilograms",
"Label":"Kg",
"Status":true,
"MUnit":"Kilograms-Kg",// here goes...
}
},
...
任何实现预期产出的建议都将是可观的。谢谢你。
更新
如果我将代码更改为结果对象集合,则输出将是:
$items = ItemQuery::create()
->joinWith('Item.Unit')
->withColumn("CONCAT (Unit.Name,'-',Unit.Label)", "MUnit")
->find();
输出:
...
#data: array:2 [▼
0 => Item {#323 ▼
#new: false
#deleted: false
#modifiedColumns: []
#virtualColumns: array:1 [▼
"MUnit" => "Kilograms-Kg" // <--- virtual column
]
#id: 2
#code: "M000002"
#name: "Item 1"
#price: 234.0
#unit_id: 1
#status: true
#aUnit: Unit {#324 ▼
#new: false
#deleted: false
#modifiedColumns: []
#virtualColumns: []
#id: 1
#name: "Kilograms"
#label: "Kg"
#status: true
#collItems: ObjectCollection {#325 ▶}
#collItemsPartial: true
#alreadyInSave: false
#itemsScheduledForDeletion: null
}
...
所以我真正需要的是将virtualColumn
MUnit放入Unit对象中。