2015-11-12 17 views
2

在這一刻把我的頭髮撕掉,希望有人能幫助我!Yii2 Kartik-V Typeahead高級小工具:如何在Mysql中存儲結果

我正在用Yii2使用Kartik-V Typeahead高級部件。

該插件的工作原理是功能在頁面上完美運行,我搜索並將結果顯示在自動完成列表中。

不幸的是,我無法在012數據庫中保存結果。我在以下行中看到一個問題:

->where([ 'name' => $model->name ])//This variable is returning null 

我試圖不正確地存儲數據嗎?我試過了我能想到的所有東西,但我相信這裏有人會想出更好的東西!

請參閱下面的完整代碼。

我的控制器:

public function actionIndex() 
{ 
$model = new Member(); 

if ($model->load(Yii::$app->request->post())) { 
    $test = Test::find() 
      ->where([ 'name' => $model->name ])//This variable is returning null 
      ->one(); 

    $test->updateCounters(['times_used' => 1]); 
} 

return $this->render('index', [ 
    'model' => $model, 
]); 

} 

/************* 
* Initial prefetch of results 
*************/ 
public function actionPrefetchlist() { 
$query = new Query; 

$query->select('name') 
     ->from('test_table') 
     ->limit(10) 
     ->orderBy('times_used'); 
$command = $query->createCommand(); 
$data = $command->queryAll(); 
$out = []; 
foreach ($data as $d) { 
    $out[] = ['value' => $d['name']]; 
} 
echo Json::encode($out); 
} 

/************* 
* Remote results 
*************/ 
public function actionRemotelist() { 
$query = new Query; 

$query->select('name') 
     ->from('test_table') 
     ->where('name LIKE "%' . $q .'%"') 
     ->limit(10) 
     ->orderBy('times_used'); 
$command = $query->createCommand(); 
$data = $command->queryAll(); 
$out = []; 
foreach ($data as $d) { 
    $out[] = ['value' => $d['name']]; 
} 
echo Json::encode($out); 
} 

視圖文件:

echo $form->field($model, 'name')->label(false)->widget(Typeahead::classname(), [ 
    'name' => 'name', 
    'options' => ['placeholder' => 'Filter as you type ...'], 
    'pluginOptions' => ['highlight'=>true], 
    'dataset' => [ 
    [ 
     'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')", 
     'display' => 'value', 
     'prefetch' => Url::to(['prefetchlist']), 
     'remote' => [ 
      'url' => Url::to(['remotelist']) . '?q=%QUERY', 
      'wildcard' => '%QUERY' 
     ] 
    ] 
    ] 
]); 
+0

謝謝,這對我很有用!順便說一句,你忘了$ q到actionRemoteList參數 – Nan

回答

0

所以事實證明,這是一個大規模的菜鳥錯誤。

如果在一些事情上別人絆倒相似的,我從模型的刪除屬性name「規則()」

我需要在數據庫中的一個整數,但我想用戶在一個字符串輸入(那麼我會轉換它在控制器中)。從規則中刪除它打破了一切。

希望這可以幫助別人:)

0

你問這裏的新模式:

$model = new Member(); 

所以你得到一個空模型 所以如果你設置了$model->name爲空 模型$model->name='test'; 比它會填充所以,先填充模型

+0

嘿,謝謝你的建議。我最終意識到我已經從模型規則()中刪除了該屬性。至於你的迴應,你需要創建$ model變量和它相關聯的模型,然後你'$ model-> load(Yii :: $ app-> request-> post())'來分配值。雖然謝謝:) – william