2017-04-03 67 views
0

我在共享主機服務器中安裝了drupal 7,並且在數據庫大小超過1gb限制時,服務器提供商從node表中刪除了一些條目。drupal'節點'表重新生成

我失去了很多條目,但其他表中存在一些數據,其中entity_id參考編號。

我可以使用其他表中的引用來查詢我的數據,但由於這些缺失條目,drupal接口無法顯示數據。

那麼,我怎麼能安全地重新生成條目到node表和它的表引用?

我在哪裏可以獲得有關drupal表中字段使用情況的信息? 如果可能,一步一步的指導將是非常有益的。

+0

如果你有一個完整的數據庫,你可以使用備份和遷移模塊安全地導出/導入數據https://www.drupal.org/project/backup_migrate – Fky

+0

@Fky,謝謝你的評論。我的要求是重新生成後端mysql數據庫中的數據以查找缺失的條目。 – Vijayakumar

+0

檢查數據庫中是否有node_revision表。假設你沒有數據庫備份,你不能恢復你刪除的節點。將來你可以使用不同的模塊來保持數據庫備份,在管理面板中監視事件,保持節點修改等。看看這篇文章http://drupal.stackexchange.com/questions/645/is-it-possible-to -restore-a-deleted-node –

回答

0

賈漢吉爾是在正確的軌道上。修改信息將爲您提供90%的方式。

我的例子假設只有節點表受到這些虛假刪除的影響。

開始通過獲取任何修改不具有關聯的節點

$result = db_query('SELECT nid, MAX(vid) AS vid, uid, title, `timestamp`, `status`, `comment`, promote, sticky FROM {node_revision} 
WHERE nid NOT IN (SELECT nid FROM {node}) GROUP BY nid'); 

你可以使用一個節點對象做下一部分,但是考慮到我們需要的只是節點條目我就直接這樣做是爲了數據庫:

foreach ($result as $record) { 
    //You might be able to get the created date by looking at the earliest revision 
    $min_result = db_query('SELECT nid, MIN(vid) as vid, `timestamp` FROM {node_revision} WHERE nid = :nid', array(':nid' => $record->nid)); 
    $created = $min_result->fetchColumn(4); 

    $new_node = db_insert('node') 
    ->fields(array(
     'nid' => $record->nid, 
     'vid' => $record->vid, 
     'type' => 'YOU CANNOT GET THIS', 
     'language' => $record->language, 
     'title' => $record->title, 
     'uid' => $record->uid, 
     'created' => $created, 
     'updated' => $record->timestamp, 
     //you get the idea... 
    )); 

} 

我沒能找到一種方法來檢索使用修訂內容類型,所以這是解決方案的弱點。假設你的所有字段數據仍然存在,這應該讓你的節點回來。

*免責聲明:我無法僞裝類似於此處顯示的問題的環境,因此此代碼基於我的經驗和一點Google搜索。這尚未經過測試,但我希望它仍然有價值。虛心接受Downvotes。

+0

'type'=>'您無法獲取此內容';連接的uid足夠了嗎? – Vijayakumar

+0

我可以安全地將node_revision表中的vuuid字段的內容複製到節點表中嗎? – Vijayakumar

+0

uid與節點類型無關。節點類型只存儲在節點表中。如果你的內容類型有一些區別字段或字段集,你可以查詢field_data_fieldname表來查看nid是否在那裏。你不想在節點表上使用vuuid作爲你的uuid。你會想要使用uuid模塊的uuid_generate方法。你可以調用uuid_generate()並獲得相應生成函數的回調,然後調用user_call_func('callbac_from_uuid')來獲得uuid。將uuid添加到用於db_insert的數組中。 – Quint