【问题标题】:Silverstripe DataObject Relationships - two has_many that relate to each otherSilverstripe 数据对象关系 - 两个相互关联的 has_many
【发布时间】:2017-05-01 14:47:03
【问题描述】:

我想弄清楚这一点有点疯狂,我确信解决方案很简单,但我在可视化这些数据关系时遇到了真正的麻烦。所以,这就是我想要做的:

我有一个名为“Offer”的对象,它需要两个 GridField 用于“ItineraryItem”和“ItineraryTab”数据对象

这是我目前在三个对象中的内容,但每次都返回错误,我似乎无法弄清楚原因。

// Offer
$has_many = array(
   "ItineraryItems" => "ItineraryItem",
   "ItineraryTabs" => "ItineraryTab"
);

// On ItineraryTab
$has_one = array(
   "Offer" => "Offer"
);
$many_many = array(
   "ItineraryItems" => "ItineraryItem"
);

// on ItineraryItem
$has_one = array(
   "Offer" => "Offer"
);
$belongs_many_many = array(
   "ItineraryTabs" => "ItineraryTab"
);

正如我所说,解决方案可能很简单,但经过这么多小时的尝试,我再也看不到它了!请帮帮我!

我正在使用 Silverstripe 3.4,如果有帮助的话

【问题讨论】:

  • 您遇到了什么错误?
  • 在获得报价的 ajax 页面中,我得到了这个:SELECT DISTINCT count(DISTINCT "ItineraryItem"."ID") AS "Count" FROM "ItineraryItem" INNER JOIN "ItineraryTab_ItineraryItems" ON "ItineraryTab_ItineraryItems" ."ItineraryItemID" = "ItineraryItem"."ID" LEFT JOIN "ItineraryTab" ON "ItineraryTab_ItineraryItems"."ItineraryTabID" = "ItineraryTab"."ID" WHERE ("OfferID" = ?) AND ("ItineraryTab"."TabNo" = ?) where 子句中的“OfferID”列不明确
  • 您是否真的需要将商品与商品和标签以及商品与标签相关联,反之亦然?我不知道这些模型代表什么,但它似乎过于复杂。发生错误是因为您在两个相互引用的地方有相同的关系别名 - 通过将 Offer 更改为 ItemOffer 或其他东西来修复,但这并不一定意味着您的关系设置正确.
  • 我愿意接受建议,我想要实现的是每个报价的行程项目都可以分组到选项卡中。我试图让客户端使用 ItineraryTab 对象创建尽可能多的选项卡。
  • 您需要项目和标签相互关联吗?否则,您可以通过 Offer 模型访问它们并远程访问交叉关系

标签: php silverstripe


【解决方案1】:

所以,我不得不自己回答这个问题,并找到了一些可行的方法——但我不确定这是正确的方法,或者它是否是一个 hack。无论如何,它都在这里,以防它帮助某人。

首先,我必须进入数据库并从 Tab 对象中删除 OfferID 列。

// Offer.php
$has_many = array(
    'ItineraryItems' => 'ItineraryItem'
);

$many_many = array(
   'ItineraryTabs' => 'ItineraryTab', 
);

//ItineraryItem.php
$has_one = array(
    "Offer" => 'Offer'
);

$many_many = array(
    'ItineraryTabs' => 'ItineraryTab'
);

//ItineraryTab.php
$belongs_many_many = array(
    "ItineraryItems" => "Offer.ItineraryItems"
);

如果有人发现更优雅的东西,请告诉我,但这似乎暂时可以完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多