【问题标题】:Yii2 Kartik-V Typeahead Advanced Widget: How to store result in MysqlYii2 Kartik-V Typeahead Advanced Widget:如何在 Mysql 中存储结果
【发布时间】:2015-11-12 10:55:16
【问题描述】:

在这一点上扯掉我的头发,希望有人可以帮助我!

我在 Yii2 中使用 Kartik-V Typeahead Advanced 小部件。

该插件有效,因为该功能在页面上完美运行,我搜索并且结果出现在自动完成列表中。

很遗憾,我无法在我的数据库中存储结果。我在以下行看到一个问题:

->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'
        ]
   ]
   ]
]);

【问题讨论】:

  • 谢谢,这对我有用!顺便说一句,你忘了 $q 到 actionRemoteList 参数中

标签: mysql json yii2 typeahead.js


【解决方案1】:

你在这里要求一个新模型:

$model = new Member();

所以你得到一个空模型 所以$model->name 是空的 如果你设置模型$model->name='test'; 比它会被填充,所以先填充模型

【讨论】:

  • 您好,谢谢您的建议。我最终意识到我已经从模型规则()中删除了该属性。至于您的响应,您需要使用与之关联的模型创建 $model 变量,然后您 '$model->load(Yii::$app->request->post())' 来分配值。不过谢谢:)
【解决方案2】:

所以事实证明这是一个严重的新手错误。

如果其他人偶然发现类似的东西,我从模型的“rules()”中删除了属性name

我需要数据库中的一个整数,但我希望用户输入一个字符串(然后我会在控制器中转换它)。从规则中删除它会破坏一切。

希望这对其他人有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多