【问题标题】:Symfony 1.4 Forms: Include Data from Relation to FormSymfony 1.4 表单:包含从关系到表单的数据
【发布时间】:2013-04-14 06:01:07
【问题描述】:

我有以下 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 表的信息,例如 item_namein_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]

如果有什么不清楚的地方,请告诉我。另外,如果您能提出更好的方法,我将不胜感激。

【问题讨论】:

    标签: php symfony1 symfony-1.4 symfony-forms


    【解决方案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->getObject()->getItem()) 每次都会有效地执行数据库查询。

    【讨论】:

    • OrderDetailForm 本身就是一个嵌入式表单。我有另一个表单InvoiceForm,其中包含与特定项目相关的几个OrderDetailForm。在 InvoiceForm 中,我想显示与之相关的OrderDetails,对于每个OrderDetail,我想显示其相关Itemitem_name。我对嵌入本身没有任何问题。我的问题是,当我执行 embedRelation() 时,在保存 Item 对象的过程中也会被保存。希望这可以澄清。感谢您的帮助。
    • 我改变了答案。我不确定它有多大帮助......但我想我会试一试。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多