У меня есть база данных, похожая на эту:
-------------------------------------
| id | FirstName | LastName | Email |
-------------------------------------
| 1 | Test | Customer | null |
| 2 | Some | Name | null |
-------------------------------------
Теперь я хочу получить идентификатор клиента, сопоставив FirstName и LastName ... если они найдены в строке, тогда идите и получите идентификатор.
Я использую Laravel 5.5.28 и попробовал Typeahead.js, чтобы добиться того, чего я изначально хотел, но по какой-то причине я могу заставить его работать только с одним столбцом: FirstName или LastName.
Это рабочий код (только для FirstName):
CDN в
<script src="{{ asset('js/vendor/jquery.min.js') }}"></script>
<script src="{{ asset('js/vendor/popper.min.js') }}"></script>
<script src="{{ asset('js/vendor/bootstrap.min.js') }}"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.1/bootstrap3-typeahead.min.js"></script>
SearchController.php
public function autocomplete(Request $request)
{
$datas = Customers::select("FirstName")
->where("FirstName", "LIKE","%{$request->input('query')}%")
->get();
$dataModified = array();
foreach ($datas as $data)
{
$dataModified[] = $data->FirstName;
}
return response()->json($dataModified);
}
}
Получение идентификатора в "JobsController.php"
public function store(Request $request)
{
$job = new Jobs;
$job->cust_id = Customers::where('FirstName', $request->input('customer_name'))->value('id');
dump($job->cust_id);
}
Это вид:
{!! Form::open(['action' => 'JobsController@store', 'method' => 'POST']) !!}
{{Form::text('customer_name', '', ['class' => 'form-control typeahead', 'placeholder' => 'Type in customer name...'])}}
{{Form::submit('Create Job', ['class' => 'btn btn-primary mt-2'])}}
{!! Form::close() !!}
Маршруты
Route::get('jobs.create', 'SearchController@index')->name('search');
Route::get('autocomplete', 'SearchController@autocomplete')->name('autocomplete');
JQuery
<script type="text/javascript">
var path = "{{ route('autocomplete') }}";
$('input.typeahead').typeahead({
source: function(query, process) {
return $.get(path, { query: query }, function(data) {
return process(data);
});
}
});
</script>
Теперь это работает просто отлично, но только для FirstName. Я хочу, чтобы это работало для полного имени (FirstName + LastName)
Мне удалось заставить его работать как с FirstName, так и с LastName, но только на "front-end" ... он не получает идентификатор из базы данных.
Вот что я сделал, чтобы в подсказках автозаполнения (при вводе текста) были указаны FirstName и LastName:
SearchController.php
public function autocomplete(Request $request)
{
$datas = Customers::select("FirstName", "LastName")
->where("FirstName", "LIKE","%{$request->input('query')}%")
->get();
$dataModified = array();
foreach ($datas as $data)
{
$dataModified[] = $data->FirstName .' '. $data->LastName;
}
return response()->json($dataModified);
}
При вводе он отображает как FirstName, так и LastName, но возвращает нулевое «id».
Я бы хотел использовать в своем запросе столбцы FirstName и LastName, чтобы получить идентификатор только в том случае, если FirstName и LastName совпадают.
Жду ваших мыслей.
Спасибо за ваше время. Очень ценю это.
Обновление # 1
Тем временем я изменил запрос в SearchController , поэтому я думаю, что код здесь в порядке:
$datas = Customers::select("FirstName", "LastName")
->where(function($q) use($request) {
$q->where("FirstName", "LIKE","%{$request->input('query')}%")
->orWhere("LastName", "LIKE","%{$request->input('query')}%");
})->get();
Единственная проблема в том, что я все еще получаю "нулевые" идентификаторы.
Может быть потому, что я пытаюсь получить идентификатор?
В JobsController У меня есть метод "store", подобный этому:
public function store(Request $request)
{
$job = new Jobs;
$job->cust_id = Customers::where('FirstName', $request->input('customer_name'))
->orWhere('LastName', $request->input('customer_name'))
->value('id');
}
Это правильный способ получить удостоверение личности?
Обновление № 2
Я был обеспокоен тем, что вход $ request-> не возвращает правильный формат, поэтому я и получил нулевой идентификатор в своем запросе, но я ошибся, потому что просто dump (); показывает, что вход $ request-> возвращает ожидаемую строку.
У меня действительно кончились идеи. Возможно, я должен использовать другой способ получить идентификатор? Как использовать идентификатор в URL?
Любые мысли и советы очень ценятся. Спасибо.