Propel 1.6插入和更新多对多关系

时间:2015-09-01 09:58:42

标签: propel

我有三张桌子

1 - Items
2 - Suppliers
3 - Item_Suppliers

第三是项目与供应商之间的交叉参考表。

我的问题是如何使用propel保存和更新item_supplier表。

在项目页面上,客户可以选择多个供应商,然后将其发送到db中保存。有没有办法将它保存到DB默认的Propel 1.6函数。这就是数据来自用户界面的方式。

array:8 [
  "Name" => "Strawberry"
  "CategoryId" => "2"
  "suppliers" => array:3 [
    0 => "1"
    1 => "2"
    2 => "3"
  ]
  "Points" => "20"
  "Description" => "Strawberry Description"
]

1 个答案:

答案 0 :(得分:0)

您应该在isCrossRef="true"关系的架构中设置Item_Suppliers属性:

<table name="Item_Suppliers" isCrossRef="true">
    <column name="ItemId" type="integer" primaryKey="true"/>
    <column name="SupplierId" type="integer" primaryKey="true"/>
    <foreign-key foreignTable="Item" onDelete="CASCADE" onUpdate="CASCADE">
        <reference local="ItemId" foreign="Id"/>
    </foreign-key>
    <foreign-key foreignTable="Supplier" onDelete="CASCADE" onUpdate="CASCADE">
        <reference local="SupplierId" foreign="Id"/>
    </foreign-key>
</table>

然后使用生成的方法更新相关模型:

$suppliers = SupplierQuery::create()->filterById( $input["supplier_ids"] )->find();
$item->setSuppliers( $suppliers )->save();