我有像這樣的表的集合:爲什麼Propel不能保存這個查詢,也不會給出任何錯誤?
logbook
,responsibility
,user
職責重複使用 - 但每個日誌只有一個不同的責任。每個責任都有一個用戶。用戶可以有多個職責(在多個日誌上)。我有一個表加入這些在一起:
logbook_responsibility
,有三個colummns(每個組成的主鍵) - logbook_id
,responsibility_id
和user_id
,這是所有外鍵。在我的schema.xml
中,此表設置爲isCrossRef="true"
。
當更新責任到一個新的用戶,我通過在一個陣列中$_POST
在$_POST['responsibility'][2] = 5
,$_POST['responsibility'][7] = 2
形式,等我有一個應該更新它們的功能:
public function updateResponsibilities($options = null)
{
foreach ($options['responsibility'] as $k => $v) {
$user = UserQuery::create()
->filterByLogbook($this->logbook)
->findOneById($v);
$logbookResponsibility = LogbookResponsibilityQuery::create()
->filterByLogbook($this->logbook)
->filterByResponsibilityId($k)
->findOne();
if (is_null($user) || is_null($logbookResponsibility)) {
break;
}
$logbookResponsibility->setUser($user)->save();
}
return true;
}
這裏我循環選項,使用提供的ID創建一個新用戶,按當前日誌過濾,以確保他們被允許負責此日誌,並抓住第一個日誌。這工作得很好(甩帶->toArray()
:
array(11) {
["Id"]=>
int(2)
["CompanyId"]=>
int(1)
["CurrentLogbookId"]=>
int(1)
["OtherFieldsHere..."]=>
// etc, etc
}
接下來我搶LogbookResponsibility,當前日誌和責任ID再次過濾在這個階段,新的用戶ID顯示正確:
array(3) {
["LogbookId"]=>
int(1)
["ResponsibilityId"]=>
int(1)
["UserId"]=>
int(1)
}
然後我用先前抓取的用戶更新這個對象,然後保存,這樣做沒有錯誤,之後檢查對象顯示對象至少已經更新:
array(3) {
["LogbookId"]=>
int(1)
["ResponsibilityId"]=>
int(1)
["UserId"]=>
int(2)
}
但是,沒有人去碰任何東西,之後在數據庫中查找,用戶ID仍爲1我已經測試運行查詢,如:
UPDATE logbook_responsibility SET user_id = 1 WHERE logbook_id = 1 AND responsibility_id = 1;
...這沒有錯誤的原理。
我實際問題是雙重的:
1)爲什麼不把它保存? (它是與我的交叉參考表?有沒有用超過2列的交叉參考表有問題?)
2)是否有普遍實現我設置一個更好方式? *(我試着實現與責任對象相同的目標,但沒有看到從那裏更新logbook_responsibility的方法)*
樂於接受建議以及實際答案!
您可以使用'Propel :: getConnection() - > getLastExecutedQuery();'來檢查最後一次查詢運行,這可能會指向正確的方向 – billyonecan