如何检索选定的选项值?

Posted

技术标签:

【中文标题】如何检索选定的选项值?【英文标题】:How to retrieve selected option value? 【发布时间】:2020-03-21 22:02:19 【问题描述】:

大家好,这里是 laravel 的新手!我正在使用选定选项下拉列表第一个选择包含国家,第二个包含州,现在当我尝试将数据库存储在数据库中时,我没有得到正确的选定状态,而是我总是在第二个中获得第一个状态选择选项!!我正在使用查询生成器。

这就是我检索国家和州的方式

    public function store(Request $request)



$country = DB::table("countries")->where("id",$request->daira);
$state = DB::table("states")->where("country_id",$request->daira);
$daira = $country->get()->first()->name;
$impact = $state->get()->first()->commune;

dd($impact);

注意:dd($impact);应该检索选定的状态,而不是检索选择列表中的第一个值

所以我的问题是如何让它检索正确的选定状态!?希望我的问题很清楚 在此先感谢。

更新: 在第一个选择选项中,我有国家名称,在第二个选项中我有 州每个国家最多有 3 个州,假设国家 A 有 3 个州 A1、A2 和 A3 我想从选择选项 Value 中选择 State A2 而不是像我在问题中的情况那样默认获得 A1

更新:我正在使用 VueJs

这是表单代码

<template>
    <div class="modal-body">
        <div class="form-group">
        <select name="direction" class="form-control">
            <option value="">Selctionner Direction</option>
            <option value="ENERGIE">ENERGIE</option>
            <option value="HYDRAULIQUE">HYDRAULIQUE</option>
            <option value="ENVIRONNEMENT">    ENVIRONNEMENT</option>
            <option value="AMENAGEMENT">AMENAGEMENT</option>
            <option value="P.T.T">P.T.T</option>
            <option value="TOURISME">TOURISME</option>
            <option value="TRANSPORT">TRANSPORT</option>
            <option value="TRAVAUX PUBLICS">TRAVAUX PUBLICS</option>
            <option value="EDUCATION">EDUCATION</option>
            <option value="ENSEIGNEMENT SUPERIEUR">ENSEIGNEMENT SUPERIEUR</option>
            <option value="URBANISME">URBANISME</option>
            <option value="FORMATION PROFESSIONNELLE">FORMATION PROFESSIONNELLE</option>
            <option value="SANTE">SANTE</option>
            <option value="JEUNESSE-SPORTS CULTURE">JEUNESSE-SPORTS CULTURE</option>
            <option value="PROTECTION SOCIALE">PROTECTION SOCIALE</option>
            <option value="INFRASTRUCTURES ADMINISTRATIVES">INFRASTRUCTURES ADMINISTRATIVES</option>
            <option value="HABITAT">HABITAT</option>
            <option value="COMMERCE">COMMERCE</option>
            <option value="LOGEMENT">LOGEMENT</option>
            <option value="LOCAUX A USAGE PROFESSIONNELE">LOCAUX A USAGE PROFESSIONNELE</option>
            <option value="FORET">FORET</option>
        </select>
        </div>
        <div class="form-group">
            <label>Selctionner Daira:</label>
            <select name="daira" class='form-control' v-model='country' @change='getStates()'>
                <option value='0' >Select Country</option>
                <option v-for='data in countries' :value='data.id'> data.name </option>
            </select>
        </div>
        <div class="form-group">
            <label>Selctionner Commune:</label>
            <select name="impact" class='form-control' v-model='state'>
                <option value='0' >Select State</option>
                <option v-for='data in states' :value='data.id'> data.commune </option>
            </select>
        </div>
        <div class="form-group">
            <label >Intitule :</label>
            <input type="text" class="form-control" name="intitule" required>
        </div>
    </div>
</template>

这是我的脚本

<script>
    export default 
        mounted() 
            console.log('Component mounted.')
        ,
        data()
            return 
                country: 0,
                countries: [],
                state: 0,
                states: []
            
        ,
        methods:
            getCountries: function()
                axios.get('/api/getCountries')
                    .then(function (response) 
                        this.countries = response.data;
                    .bind(this));

            ,
            getStates: function() 
                axios.get('/api/getStates',
                    params: 
                        country_id: this.country
                    
                ).then(function(response)
                    this.states = response.data;
                .bind(this));
            
        ,
        created: function()
            this.getCountries()
        
    
</script>

【问题讨论】:

检查来自请求dd($request-&gt;all());的内容 它从我的表单中检索 4 个值 @MohamedMidou 什么是commune?是州名吗? @AmitSenjaliya 是的,这是一个州名 @MohamedMidou 你可以试试dd($state);。正确的状态检索? 【参考方案1】:

你能发布dd($request-&gt;all())的结果吗?


假设您选择的名称是 daira and Impact,您应该能够通过以下方式获得发布的值:

public function store(Request $request)

    $daira = $request->daira;
    $impact = $request->impact;

【讨论】:

这回答了我一半的问题,因为代码只检索所选值的 id 我希望将“名称”存储在数据库中而不是“id” 所以你想存储名字而不是ID?那么您应该使用名称作为值而不是 ID 来制作选择框,如下所示: 或使用刀片 Form::select('daira',\App\Daira::pluck('name','name')) 【参考方案2】:

我了解您的问题是第一个州返回,因为当您传递国家/地区 ID 时,它会返回与该国家/地区相关的所有州。

因此您需要从状态下拉列表中传递状态 ID。

  <select name="impact">
       <option value="id"> STATE NAME  </option>
  </select>

然后您需要在控制器中传递该状态 ID。

   $state = DB::table("states")->where("id",$request->impact);

【讨论】:

@MohamedMidou 你可以在状态查询中直接传入 imapct。我已经更新了答案。 你的 vue js 很完美。现在您可以使用状态 ID 检索状态。 我正在检索状态 id,我想用那个 id 得到那个状态 id 的名称【参考方案3】:

希望您了解您的疑问 我假设 $request-&gt;daira 是国家/地区 ID

public function store(Request $request)

    //here you selected a country with provided country ID 
    //this returns Query Builder object
    $country = DB::table("countries")->where("id",$request->daira);

    //here you are returning all the states where the country_id is 
    //the provided country ID
    //Note that this returns all the states (Query Builder object)
    $state = DB::table("states")->where("country_id",$request->daira);

    //You return `Illuminate\Support\Collection` then you got the first item 
    //from collection
    $daira = $country->get()->first()->name;

    //You returned all the states `Illuminate\Support\Collection`
    //and you picked the first state from the collection, 
    //which is likely the first item in your
    //form select field options
    $impact = $state->get()->first()->commune;

    dd($impact);

由于您没有指定 state_id,您将始终获得给定国家/地区下所有州的列表。 我假设表关系是 Country -> hasMany -> State

你需要添加 state_id 作为约束,所以只选择一个状态

$state_id = $request-&gt;state 我假设您的表单中有状态

$state = DB::table("states")
->where("country_id",$request->daira)
->where('id', $state_id)
->first();

$impact = $state->commune

【讨论】:

我知道你能给我一个解决方案,这样我就不会选择第一个状态,而是选择正确的选择状态谢谢:)

以上是关于如何检索选定的选项值?的主要内容,如果未能解决你的问题,请参考以下文章

检索选择元素的文本

Java Servlet:如何检索选定的单选按钮值?

如何检索组合框的选定值(不是文本)

从 Django 表单 ChoiceField 中检索选定的选项

如何使用 Selenium WebDriver 和 Java 获得选定的选项

检索图像中选定的单选按钮值