2016-02-04 50 views
-2

我在上傳文件的幫助下批量創建了很多不同的相關模型。有沒有辦法讓整個過程像用戶的談話,但保持在try-catch事務環境?我的意思是,例如在這個過程的中間,有兩種可能性可供選擇,用戶可以選擇一個,或者「你確定要這樣做嗎?」。等等,然後這個過程會更進一步?yii2在轉換中確認和/或選擇

+0

你介意分享關於你的主要任務的更多細節嗎?我的意思是更多的背景:「我通過上傳文件的幫助,批量創建了許多不同的相關模型」。謝謝! – PLM57

+0

我真的不知道我怎麼能更好地解釋它。就像我說的那樣。我正在上傳文件,並從中提取信息,並將這些信息手動分配給模型屬性。我知道這不是一個真正的方法,但我必須這樣做。我們有關於酒店和訪客的文本文件或csvs。用戶正在加載此csv /文本,並且該函數將其提取爲酒店創建模型,併爲其分配,驗證,保存所有必要的屬性,然後在for-each循環中爲訪客提供模型。舉個例子,國籍還沒有在數據庫中, – user2511599

+0

或屬性(文本)沒有明確定義,你可以選擇兩種可能性。只是因爲這樣一個「小」的問題才把整個交易推回來很困難。我想知道是否可以在交易過程中顯示一個表單,供用戶選擇。 – user2511599

回答

0

我能想到的最簡單的方法是以下幾點。

進口表作爲中間存儲

  1. 當導入閱讀您的文件爲「進口」 - 表。每個csv或文本文件的一行記錄。讀取時保存整行。
  2. 保存之前,斷言沒有保存相同的行之前(唯一索引?)
  3. 然後在上載後調用的另一個控制器操作迭代此表中的所有條目。處理數據並立即保存或在必要時詢問用戶。
  4. 從導入表中刪除該行或將其標記爲導入。後者具有的優點是,您可以跟蹤已導入的行,但需要在一定的時間間隔後進行一些清理,以防止數據膨脹。
  5. 完成!

表結構

只是作爲一個例子......這裏是創建語句,你可以使用MySQL的:

CREATE TABLE `import` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `is_imported` tinyint(1) NOT NULL DEFAULT '0', 
    `data` text COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
0

我覺得它更容易,我要去爲了做到這一點,我打算將所有數據發送到一個新的表單(具有其他可供選擇的屬性),用戶可以選擇一個或多個額外的信息來運行交易問題。