如何在 Laravel 中连接两个属性后将值搜索到数据库中

Posted

技术标签:

【中文标题】如何在 Laravel 中连接两个属性后将值搜索到数据库中【英文标题】:How to search value into a database after concatenate two attributes in Laravel 【发布时间】:2020-07-30 00:02:41 【问题描述】:

我有一个具有以下属性的表组织

id
name
acronym

并通过使用访问器连接组织模型中的名称和首字母缩写词属性来重新格式化组织名称

    public function getOrganizationNameAttribute()
    
        if($this->acronym != null)
        
            return $this->name. ' ('.$this->acronym.') ';
        
        else
            return $this->name;
        
    

创建的表单,用户必须在使用 datalist 输入时选择组织

<label class="col-form-label">Organization <span class="star">$star ?? ''</span></label>
<input list="organizations" type="text" name="organization" class="form-control @error('organization_id') is-invalid @enderror" value="old('organization',$old ?? '')" placeholder="Ex. TGNP Mtandao, Vodacom" $req ?? ''/>
<datalist id="organizations">
    @foreach($organizations as $organization)
        <option value="$organization->organization_name"/>
    @endforeach
</datalist>

当用户选择特定组织时,系统将搜索组织名称并获取其唯一 ID,如果不存在,系统将创建新值并返回 ID

示例在组织表中有值

id:1 
name:United Republic of Tanzania
acronym: URT

然后表单返回组织名称为

United Republic of Tanzania (URT)

这是我的问题:

当用户选择坦桑尼亚联合*** (URT) 并提交表单时,我希望系统返回 ID 1 但返回 null。我该如何解决这个问题?

【问题讨论】:

你在哪里比较你的搜索?? 具有像Organization::where('name','LIKE','%'.$value.'%')-&gt;get(); 这样的名称属性,其中值是组织名称 你会先检查你的$value 值吗?是空的还是别的? 是的,我检查了这是函数public function search($value) if(!is_null($value)) $data= Organization::where('name','LIKE','%'.$value.'%')-&gt;get(); dd($data); 可能你的表单方法是post?你应该使用$request-&gt;value 【参考方案1】:

在你的 html 中你应该使用

首先将这些链接添加到您的脑海中

<link href="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/select2@4.0.13/dist/js/select2.min.js"></script>

然后使用这个选择

<select name="organizations" id="myorgselect" class="form-control" multiple="multiple">
    @foreach($organizations as $organization)
         <option value="$organization->organization_id">
              $organization->organization_name
         </option>
    @endforeach
</select>

并将其添加到您的 javascrict

$("#myorgselect").select2(
tags: true
)

使用标签见下方链接

https://select2.org/tagging

【讨论】:

这只会选择现有数据,但我希望用户创建更多数据库中不存在的选项,因此我使用 datalist 如果存在,则搜索 id 并获取,如果不存在,它将创建新对象并获取 id select 2 有一个选项叫做标记 exacli 你在找什么我更新我的答案 感谢您提供此选项,但我还有一个问题,您如何检查该值是否不存在以及系统是否创建新值。因为我尝试如果值存在则表单提交组织 ID,如果不存在表单提交新名称,我的目标是捕获组织 ID 并将其存储到另一个表中 找到了解决方案。但是再次非常感谢你,我为此苦苦挣扎了很长时间,现在我没事了

以上是关于如何在 Laravel 中连接两个属性后将值搜索到数据库中的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮后将值添加到不同的列

Laravel 8 Jetstream如何在重置密码后将用户重定向到自定义路由

如何将值从数据库中的laravel存储到数组中?

如何在回调后将值返回给main函数

如何自动将值添加到 Laravel 中的现有值

在 laravel 中插入关系