咱們試着直接在Select中輸入新的演員
php
點擊保存數據庫
如何實現隨時在Select中輸入新的演員。咱們將採用Ajax方式完成,在提交保存視頻以前,經過Ajax方式實現提早於保存視頻以前,保存演員信息。這樣就不會出現上述的錯誤。數組
File:pluginsraiseinfomoviesformwidgetsActorbox.php數據結構
public function getSaveValue($actors) { dd($actors); return $actors; }
利用Chrome的開發工具-選擇network,提交表單,咱們能夠看見getSaveValue函數得到傳入的參數及其內部數據結構,能夠看出是一個數組,並且傳遞的是輸入的文本,而不是id函數
下面咱們針對新輸入的值進行處理
首先先創建一個數組,newArray,判斷值是不是數字,若是是數字就保存到newArray中,若是不是數字,則須要新建一個Actor,這裏咱們模擬一個name和lastname,保存這個actor,而後把保存的這個actor的id放到newArray中:
File:pluginsraiseinfomoviesformwidgetsActorbox.php工具
public function getSaveValue($actors) { // 聲明一個數組 $newArray = []; foreach($actors as $actorID){ // 檢查是不是數字 if(!is_numeric($actorID)){ // 若是不是數字,則新建一個actor $newActor = new Actor; $newActor->name = 'John'; $newActor->lastname = 'Gusak'; $newActor->save(); // 並將新建的actor的id放入新的數組 $newArray[] = $newActor->id; } else { $newArray[] = $actorID; } } dd($newArray); return $actors; }
保存表單後,咱們能夠發現,傳入的數組裏面最後就是新插入的actor了。
咱們再在數據庫中確認一下開發工具
下面,咱們對輸入的用戶姓名進行分離。
File:pluginsraiseinfomoviesformwidgetsActorbox.phpspa
public function getSaveValue($actors) { // 聲明一個數組 $newArray = []; foreach($actors as $actorID){ // 檢查是不是數字 if(!is_numeric($actorID)){ // 若是不是數字,則新建一個actor $newActor = new Actor; $nameAndLastname = explode(' ',$actorID); $newActor->name = $nameAndLastname[0]; $newActor->lastname = $nameAndLastname[1]; $newActor->save(); // 並將新建的actor的id放入新的數組 $newArray[] = $newActor->id; } else { $newArray[] = $actorID; } } // dd($newArray); return $newArray; }
刷新頁面,添加新的演員,試着輸入「洪濤 李」,提交表單,就能夠保存了。3d
可是,這個功能有個明顯的缺陷,就是若是你提交屢次,這個新的演員,就會重複提交多個新的。只是他們的id不同。這個問題其實很好解決,就是先判斷是否有重名的演員就能夠了。code