2012-10-16 48 views
0

我有一個類「上市」,這具有以下字段:數據對象與寫更新()沒有反映在CMS

static $db = array(
      ... 
      'Left' => 'Varchar', 
      'Top' => 'Varchar' 
      ... 
    ); 

我抓住這顯示了與地圖:

function getListings(){ 
     $sqlQuery = new SQLQuery(); 
     $sqlQuery->setFrom('ListingCategory_Listings'); 
     $sqlQuery->selectField('STLC.Title AS cTitle, STLL.Title AS lTitle, Listing_Live.ID AS lID, ListingCategory.ID as cID, Phone, Email, Website, Filename, Top, Listing_Live.Left, STLC.ID AS catID'); 
     $sqlQuery->addLeftJoin('Listing_Live', '"ListingCategory_Listings"."ListingID" = "Listing_Live"."ID"'); 
     $sqlQuery->addLeftJoin('SiteTree_Live', '"Listing_Live"."ID" = "STLL"."ID"', 'STLL'); 
     $sqlQuery->addLeftJoin('ListingCategory', '"ListingCategory_Listings"."ListingCategoryID" = "ListingCategory"."ID"'); 
     $sqlQuery->addLeftJoin('SiteTree_Live', '"ListingCategory"."ID" = "STLC"."ID"', 'STLC'); 
     $sqlQuery->addLeftJoin('File', '"ListingCategory"."IconID" = "File"."ID"'); 
     $sqlQuery->addWhere('"Listing_Live"."ID" IS NOT NULL'); 
     $sqlQuery->setOrderBy('ListingCategory.ID', 'ASC'); 
     $result = $sqlQuery->execute(); 
     $dataObject = new ArrayList(); 
     foreach($result as $row) { 
      $dataObject->push(new ArrayData($row)); 
     } 
     return $dataObject; 
    } 

我有一個函數來更新對象的左側和頂部值(通過拖放前端對象的實例通過AJAX觸發):

function updatePoi(){ 
     $left = $_POST['left']; 
     $top = $_POST['top']; 
     $id = $_POST['ID']; 
     if ($poi = DataObject::get_one('Listing', '"Listing"."ID" = '.$id)){ 
      $poi->Left = $left; 
      $poi->Top = $top; 
      $poi->write(); 
      return 'success'; 
     }else{ 
      return 'error'; 
     } 
    } 

這些肯定會更新,因爲在頁面刷新時,對象反映了更新的頂部和左側值,但是我在CMS中顯示了這些字段,但它們在這裏顯示爲空白。此外,當我保存對象的CMS,左,前值被清除,我不得不在前端重新放置它們。

有誰知道爲什麼發生這種情況?

更新:似乎write()只更新了Listing_Live表,而不是Listing表,我怎麼才能讓它更新而不用原始SQL呢?

回答

0

作爲速戰速決,我已經改變了更新功能:

function updatePoi(){ 
     $left = $_POST['left']; 
     $top = $_POST['top']; 
     $id = $_POST['ID']; 
     DB::query('UPDATE "Listing" SET "Left"='.$left.', "Top"='.$top.' WHERE "ID"='.$id); 
     DB::query('UPDATE "Listing_Live" SET "Left"='.$left.', "Top"='.$top.' WHERE "ID"='.$id); 
     return 'success'; 
    } 

我很高興聽到這樣的整潔方式。

1

我建議使用

$poi->Top = $top; 
$poi->write(); 
$poi->publish("Live", "Stage"); 
相關問題