我有以下2个模型的示例模式OrderDetail和Item,多对一关系:
OrderDetail:
columns:
invoice_id: { type: integer, notnull: true }
item_id: { type: integer, notnull: true }
quantity: { type: integer, notnull: true }
transaction_price: { type: integer }
currency: { type: string(50), default: peso }
relations:
Invoice: { type: one, local: invoice_id, foreign: invoice_id }
Item: { type: one, local: item_id , foreign: item_id }
indexes:
invoice_to_item:
fields: [item_id, invoice_id]
type: unique
Item:
actAs: { Timestampable: ~, SoftDelete: ~ }
columns:
item_id: { type: integer, autoincrement: true, primary: true }
item_name: { type: string(100), notnull: true }
description: { type: text, notnull: true }
part_number: { type: string(50) }
size: { type: string(50) }
unit: { type: string(10) }
in_stock: { type: integer, notnull: true }
in_transit: { type: integer, notnull: true }
released: { type: integer, notnull: true }
borrowed: { type: integer, notnull: true }
borrower_name: { type: string }
item_type_id: { type: integer, notnull: true }
relations:
OrderDetails: { type: many, class: OrderDetail, local: item_id, foreign: item_id }
Prices: { type: many, class: Price, local: item_id, foreign: item_id }
在我的表单中,我想要包含项目表格中的信息,例如item_name
和in_stock
。
我只想做的是我想显示Item表格中与我的表格相关的数据。为了清晰和组织,我想在表单对象中包含此信息。我希望能够以我的形式做这样的事情:
echo $form[$number]['Item']['part_number']->getValue()
// where $number is the index of the OrderDetail in the form and key 'Item' contains data for the Item related to this OrderDetail.
我尝试在OrderDetail中嵌入Item关系,例如:
class OrderDetailForm extends BaseOrderDetailForm {
public function configure() {
// some config here...
$this->embedRelation('Item');
}
}
这个问题是当我保存表单时, Item对象正在被验证并保存。我只是将这些信息用于显示目的。以下是我希望表单如何以及我希望做什么的粗略示例:
OrderDetail: 1
Item: Headset
In Stock: 5pcs
Quantity: [input field here that can be changed by the user]
如果有任何不清楚的地方,请告诉我。此外,如果你能提出更好的方法,我真的很感激。
答案 0 :(得分:1)
如果OrderDetailForms嵌入在InvoiceForm中,并且您想要从这些中访问Item对象。然后我建议你在你的模板中使用这样的东西:
// apps\myApp\modules\myModule\templates\editSuccess.php
$orderDetailForms = $invoiceForm->getEmbeddedForms();
foreach ($orderDetailForms as $key => $form) {
$item = $form->getObject()->getItem();
echo 'Item name: ' . $item->getItemName() . '<br />';
echo 'In stock: ' . $item->getInStock() . '<br />';
echo $form;
}
这里要做的是确保在执行查询时检索Item对象以及OrderDetail对象。因为该行($ form-&gt; getObject() - &gt; getItem())每次都会有效地执行数据库查询。