我希望将文本类型存储在数据库中,而不是 id Ajax Laravel 7

Posted

技术标签:

【中文标题】我希望将文本类型存储在数据库中,而不是 id Ajax Laravel 7【英文标题】:I want text type to be stored in database instead of the id Ajax Laravel 7 【发布时间】:2020-11-15 23:55:36 【问题描述】:

我是阿贾克斯的新手。所以,请原谅我缺乏知识。当我通过view 中的data 时,我在我的数据库中得到IDs。即使我从下拉依赖菜单中传递了text,也可以解释一下!

请查看这 2 个表格类别

和产品

我想在我的视图中从类别('Désignation' => first table)中获取名称 - 但我得到了 ID。请帮忙。

控制器

public function create() 
  $prod=ProductCat::all();
  return view('Achats.create',compact('prod'));


public function findProductName(Request $request) 
   $data = Product::select('Désignation','id') -> where('catégorie', $request->id) -> take(100) -> get();
   return response()->json($data);


public function findRef(Request $request) 
  $p = Product::select('Référence')->where('id',$request->id)->first();
  
  return response()->json($p);

路线

Route::get('create','AchatController@create')->name('create.Achat');
Route::get('/findProductName','AchatController@findProductName');
Route::get('/findRef','AchatController@findRef');

查看

<form action=" route('Achat.store')" method="POST" enctype="multipart/form-data">
<span>Product Category: </span>
<select style="width: 200px"class="form-control catégorie" name="catégorie" id="catégorie" >
    <option value=" " disabled="true" selected="true">-Select-</option>
    @foreach($prod as $cat)
      <option value="$cat->id">$cat->Désignation</option>
   @endforeach
  </select>
  <span>Product Name: </span>
<select name ="Désignation" class="form-control Désignation" id="Désignation" style="width: 200px" >

  <option value="" disabled="true" selected="true">Product Name</option>
 </select>

 <span>Product ref: </span>
 <input name="Référence" id="Référence" class="form-control Référence" type="text" >

  <br>

ajax

      <script type="text/javascript">
$(document).ready(function()

    $(document).on('change','.catégorie',function()
        // console.log("hmm its change");

        var cat_id=$(this).val();
        // console.log(cat_id);
        var div=$(this).parent();

        var op=" ";

        $.ajax(
            type:'get',
            url:'!!URL::to('findProductName')!!',
            data:'id':cat_id,
            success:function(data)
                //console.log('success');

                //console.log(data);

                //console.log(data.length);
                op+='<option value="0" selected disabled>chose product</option>';
                for(var i=0;i<data.length;i++)
                op+='<option value="'+data[i].id+'">'+data[i].Désignation+'</option>';
               

               div.find('.Désignation').html(" ");
               div.find('.Désignation').append(op);
            ,
            error:function()

            
        );
    );

    $(document).on('change','.Désignation',function () 
        var prod_id=$(this).val();

        var a=$(this).parent();
        console.log(prod_id);
        var op="";
        $.ajax(
            type:'get',
            url:'!!URL::to('findRef')!!',
            data:'id':prod_id,
            dataType:'json',//return data will be json
            success:function(data)
                console.log("Référence");
                console.log(data.Référence);

                // here price is column name in products table data.coln name
                a.find('.Référence').val(data.Référence);

            ,
            error:function()

            
        );


    );

);

【问题讨论】:

【参考方案1】:

看起来您将 Id 作为值传递,因此在您的数据库表中获取 Id 的原因。

改变

@foreach($prod as $cat)
  <option value="$cat->id">$cat->Désignation</option>
@endforeach

@foreach($prod as $cat)
      <option value="$cat->Désignation">$cat->Désignation</option>
@endforeach

这应该会有所帮助。

【讨论】:

感谢您的回复,但问题是当我尝试这样做时,当我选择类别时下拉菜单没有显示其他产品

以上是关于我希望将文本类型存储在数据库中,而不是 id Ajax Laravel 7的主要内容,如果未能解决你的问题,请参考以下文章

在 Python Discord Bot 中按名称而不是 ID 向特定文本通道发送消息

存储 RowEditing 的 ID 而不是索引

如何在数据库中存储选择选项的名称而不是值

将用户 ID 作为 url 参数是不是安全?

将增量存储在数据库中而不是整个对象中

Kendo ComboBox - 如何根据其文本()而不是值()选择选项?