Как искать значение в базе данных после объединения двух атрибутов в Laravel

У меня есть таблица Организации, которые имеют следующие атрибуты

id
name
acronym

И переформатируйте название организации, соединив атрибуты имени и аббревиатуры в модели организации с помощью Accessor.

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

Созданная форма, в которой пользователь должен выбрать организацию при наборе текста с помощью списка данных.

<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:1 
name:United Republic of Tanzania
acronym: URT

Затем сформируйте возврат имени организации как

United Republic of Tanzania (URT)

Вот моя проблема:

когда пользователь выбирает Объединенная Республика Танзания (URT) и отправляет форму, я ожидаю, что система вернет ID 1, но вместо этого вернет ноль. Как мне это решить?


person antweny    schedule 16.04.2020    source источник
comment
Где вы сравниваете свои поиски??   -  person A.A Noman    schedule 16.04.2020
comment
с атрибутом имени, например Organization::where('name','LIKE','%'.$value.'%')->get();, где значение — название организации   -  person antweny    schedule 16.04.2020
comment
Вы сначала проверяете значение $value ?? Он пустой или нет?   -  person A.A Noman    schedule 16.04.2020
comment
да, я проверяю, это функция public function search($value) { if(!is_null($value)){ $data= Organization::where('name','LIKE','%'.$value.'%')->get(); dd($data); } }   -  person antweny    schedule 16.04.2020
comment
Может быть, ваш метод формы post? Вы должны использовать $request->value   -  person A.A Noman    schedule 16.04.2020
comment
это функция модели static function search($value) { if(!is_null($value)){ $data= self::where('name','LIKE','%'.$value.'%')->get(); dd($data); } }, я вызываю ее из контроллера Organization::search($request->value);, когда я умираю, дамп $valeu в функции модели отображает представленное значение, которое является Объединенной Республикой Танзания (URT), но когда я ищу его, возвращаю ноль, но если я ищу Объединенная Республика Танзания без (URT), возвращаю ID 1   -  person antweny    schedule 16.04.2020


Ответы (1)


в вашем html вы должны использовать

сначала добавьте эти ссылки себе в голову

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/[email protected]/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>

и добавьте это в свой javascript

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

см. ссылку ниже для использования тегов

https://select2.org/tagged

person Aria Shahdadi    schedule 16.04.2020
comment
это будет выбирать только существующие данные, но также я хочу, чтобы пользователь создавал больше параметров, которых нет в базе данных, поэтому я использую datalist, если он существует, он ищет id и получить, если нет, он создаст новый объект и получит идентификатор - person antweny; 17.04.2020
comment
select 2 имеет опцию, называемую пометкой exacli, что вы ищете, я обновляю свой ответ - person Aria Shahdadi; 17.04.2020
comment
спасибо за эту опцию, но у меня есть еще один вопрос, как вы можете проверить, не существует ли значение, и система создает новое. Потому что я пытался, если значение существует, идентификатор организации отправки формы, если форма не отправляет новое имя, и моя цель - захватить идентификатор организации и сохранить его в другой таблице. - person antweny; 17.04.2020
comment
нашел решение. Но еще раз большое спасибо, я долго боролся за это, теперь я в порядке - person antweny; 17.04.2020