2015-08-14 65 views
-1

我有我的工作的应用程序之间的循环连接,我有一个有点问题如何防止实体

的应用程序基本上是这样的: Client Group (1) - Call client (2) (parent_id: 1, path: 1/2/) - Do something (3) (parent_id: 1, path: 1/3/) - Another group (4) (parent_id: 1, path: 1/4/) -- Another task (5) (parent_id: 4, path: 1/4/5/) Call supplier and order client products (8) (parent_id: 7, path: 6/7/8/, dependency_id: 2, dependency_path: 2/) Handle products group (6) (dependency_id: 8, dependency_path: 2/8/) - Some task (7) (parent_id: 6, path 6/7/)

您可以创建组/递归文件夹结构中的任务。我已经解决了父/子与parent_path列之间的循环连接问题。

每个任务/组可以依赖于另一个实体,然后才能将其标记为已完成。假设您有一项任务“呼叫客户端”,并且您有另一项任务“呼叫供应商和订购客户端产品”。在“呼叫客户端”被标记为完成之前,您不能将“呼叫供应商”标记为已完成。

问题是,我无法弄清楚如何确保一个实体只能依赖于另一个实体,而这个实体并不处于任何连接状态。

这意味着,如果fooEntity取决于barEntity,你不能让barEntity依赖fooEntity(或者说是依赖于fooEntity任何实体,或者说是fooEntity的孩子任何单位或者????)

我解决了与dependency_path专栏直接受抚养人的问题,但其余的超出了我。

因此,大家可以看到我真的很困惑,这和没有我的想法应该是什么规则,所以在这里,一切都会顺利进行和最终用户将不能够把事情搞得一团糟。

你的帮助真的会真的很感激!谢谢:)

回答

1

如果您可以在PHP上进行检查,而不是仅限于MySQL,“路径”是解决问题的关键。

每个“路径”的最后一位数对此没有必要,但其余的可以像过滤器一样。

// Get each digit of "path" but its last 
function get_parent_digits($path){ 
    $digits = explode('/', substr($path, 0, -1)); 
    array_pop($digits); 
    return $digits; 
} 

// Compare two and check if one can be dependant on another 
function can_be_dependant($parent_digits_1, $parent_digits_2){ 
    // Brother 
    if(count($parent_digits_1) === count($parent_digits_2)){ 
     return true; 
    } 
    // One is not another's child nor decendant 
    else{ 
     return $parent_digits_1 === array_diff($parent_digits_1, $parent_digits_2); 
    } 
} 

然后,你可以检查它像...:

// $row_1 and $row_2 are the results of mysql select query 
$digits_1 = get_parent_digits($row_1['path']); 
$digits_2 = get_parent_digits($row_2['path']); 
if(can_be_dependant($digits_1, $digits_2)){ 
    // Okay 
}else{ 
    // No 
} 

$ row_1或$ row_2可能是新的数据,你可以将其保存在数据库中之前与功能验证。

+0

谢谢你,我最终这样做:http://pastie.org/private/losywgshez82nc5hn933a。问题是,我仍然可以创建一个实体,该实体是依赖于我要为其设置依赖项的实体的实体的后代。 (这里是一个树的例子:http://pastie.org/private/oeaymcbplt1rjzyjplzj0w) – sUP

+0

确认你的目标是什么。 实体1取决于实体3. 实体1.1​​是实体1的孩子,这意味着实体1.1​​也取决于实体3? 实体3不能依赖实体1.1​​吗? 取而代之,您写了“Call supplier ...”(8)取决于“Call client”,尽管“Handle products group”(6)是(8)的根。 这是矛盾的,你要警告的时候(8)会发生什么? –

+0

最后我想我解决了它。解决方案在这里:http://pastie.org/private/cniomypxn38xrolq8b6bw – sUP