簡體   English   中英

如何在 yii2 中預先輸入顯示數據庫信息?

[英]How can I make typeahead show database information in yii2?

我想在我的項目中進行搜索。 我使用預先輸入但它不起作用。 這是我的代碼:

<?php
        echo '<label class="control-label">Select Repository</label>';
        $template = '<div><p class="repo-language">{{no_telepon}}</p>' .
            '<p class="repo-name">{{nama}}</p>' .
            '<p class="repo-description">{{email}}</p></div>';
        echo Typeahead::widget([
            'name' => 'twitter_oss', 
            'options' => ['placeholder' => 'Filter as you type ...'],
            'dataset' => [
                [
                    'prefetch' => Penerima::find()->all(),
                    'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
                    'display' => 'value',
                    'templates' => [
                        'notFound' => '<div class="text-danger" style="padding:0 8px">Unable to find repositories for selected query.</div>',
                        'suggestion' => new JsExpression("Handlebars.compile('{$template}')")
                    ]
                ]
            ]
        ]);
    ?>

這個問題問了很久。

我也遇到了同樣的問題,但我可以弄清楚這一點。

為了將來參考,我添加了這篇文章。

在你的控制器中

$result = SampleModel::find()
                ->select('Attribute_name')
                ->where('name LIKE "%' . $searchParameter .'%"')
                ->asArray()
                ->all();

            return Json::encode($result);
  1. 在這里,您需要將數據庫值作為“關聯數組”獲取,您可以使用“asArray()”獲取該值。
  2. 然后當你看到返回值作為 Json 編碼。

在您的“視圖”中

<?php 

                            echo Typeahead::widget([
                                'name' => 'sampleName',
                                'options' => ['placeholder' => 'Filtering data ...'],
                                'scrollable' => true,
                                'pluginOptions' => ['highlight'=>true],
                                'dataset' => [
                                    [
                                    'remote' => [
                                        'url' => Yii::$app->urlManager->createUrl(['sample/action']) . 
                                        '?searchParameter=%QUERY',
                                        'wildcard' => '%QUERY'
                                    ],
                                    'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('Atribute_name')",
                                    'display' => 'Atribute_name',
                                    'limit' => 10,
                                    ],
                                ],

                                'pluginEvents' => [

                                    'typeahead:select' => 'function(e, s) { 
                                        EnableUserDetailsTypeAhead(s);
                                    }',
                                ]
                            ]);
                        ?>

這里有幾件事情需要考慮。

  1. 調用控制器動作。 你可以這樣做。
Yii::$app->urlManager->createUrl(['sample/action']) . 
                                        '?searchParameter=%QUERY',
                                        'wildcard' => '%QUERY'
                                    ],
  1. 必須提供數據集中的以下幾行。
'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('Atribute_name')",
'display' => 'Atribute_name',

你會得到預期的數據。

我已經測試過這個示例代碼並且這是有效的

文檔

prefetch : arrayprefetch選項對象的配置。 有關可以為此參數設置的選項,請參閱文檔 返回數據必須經過 Json 編碼並轉換為[['value' => 'data1'], ['value' => 'data2'],...]格式的關聯數組,其中value是固定key設置在display

您正在傳遞對象數組而不是鍵值對數組。 您可以使用asArray創建對象列表。 您需要將display更改為包含數據的字段的名稱:

'prefetch' => Penerima::find()->select('title')->asArray()->all(),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM