0

次のフィールドを持つクラス「リスト」があります。

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 に保存すると、Left 値と Top 値がクリアされ、フロント エンドで再配置する必要があります。

なぜこれが起こっているのか誰にもわかりますか?

更新: write() は Listing テーブルではなく Listing_Live テーブルのみを更新するようですが、生の SQL でこれを行わずに両方を更新するにはどうすればよいですか?

4

2 に答える 2

1

私は使用することをお勧めします

$poi->Top = $top;
$poi->write(); 
$poi->publish("Live", "Stage");
于 2012-10-17T06:25:31.730 に答える
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';
    }

これを行うためのよりきちんとした方法を聞いてうれしいです。

于 2012-10-16T21:27:16.420 に答える