我一直在根据自己的情况尝试使用本教程(https://www.youtube.com/watch?time_continue=7&v=D4ny-CboZC0),但出现此错误:
POST http://127.0.0.1:8000/transactions/fetch 500(内部服务器错误)
create.blade.php
@extends('layouts.app')
@section('title', 'New Transaction')
@section('content')
<form action="/transactions" method="POST">
<div class="row">
<label>Item Name</label>
<input type="text" name="item_name" id="item_name" class="form-control input-lg" placeholder="Item Name">
<div id="itemList"></div>
{{ csrf_field()}}
<label>Quantity</label>
<input type="text" name="quantity[]" value="" placeholder="Quantity">
{{ $errors->first('quantity')}}
</div>
<button type="submit" class="btn btn-primary">Complete Order</button>
@csrf
</form>
<script type="text/javascript">
$(document).ready(function(){
$('#item_name').keyup(function(){
var query = $(this).val();
if(query!=''){
var _token = $('input[name="_token"]').val();
console.log(_token);
$.ajax({
url: "{{route('autocomplete.fetch')}}",
method: "POST",
data: {query: query, _token:_token},
success:function(data){
$('#itemList').fadeIn();
$('#itemList').html(data);
}
})
}
});
})
</script>
@endsection
TransactionController.php 中的fetch函数
public function fetch(Request $request)
{
if($request->get('query')) {
$query= $request->get('query');
$data = DB::table('items')
->where('item_name', 'LIKE', '%{$query}%')
->get();
}
$output = '<ul class="dropdown-menu" style="display:block; position:relative">';
foreach ($data as $row) {
$output.= '<li> <a href="#">' .$row->item_name.'</a></li>';
}
$output .= '</ul>';
echo $output;
}
web.php
Route::resource('transactions', 'TransactionController');
Route::post('/transactions/fetch', 'TransactionController@fetch')->name('autocomplete.fetch');
请帮助我找出问题所在。我尝试了许多在网上看到的方法,但没有一个起作用。
谢谢!
答案 0 :(得分:3)
请使用import os
import datetime
data = dict()
sites = ['.']
for site in sites:
data['listofiles'] = []
data['site'] = site
for f in os.listdir(site):
data['listofiles'].append(
{'time': str(datetime.datetime.fromtimestamp(os.path.getmtime(os.path.join(site, f)))), 'name': f})
代替->where('item_name', 'LIKE', '%' . $query . '%')
。
->where('item_name', 'LIKE', '%{$query}%')
对我有用。
答案 1 :(得分:0)
您已经非常接近解决方案。但是我想你的错误来自这里: 控制器中的$ data变量将是一个数组,因此在您的foreach正文中,您会从此处收到错误
$row->item_name
所以代替这个:
$data = DB::table('items')
->where('item_name', 'LIKE', '%{$query}%')
->get();
编写此代码(假设您的模型名称是“ Item”):
$data = Item::where('item_name', 'LIKE', '%{$query}%')->get();
恕我直言,这将解决问题。但这只会返回区分大小写的值。例如,如果您键入“ abc”,它将不会返回带有“ ABC”的单词。因此,您可以将2面都设为大写并进行比较。像这样:
$data = Item::whereRaw("UPPER(item_name) LIKE '%" . strtoupper($query) . "%'")->get();
如果您想继续搜索特殊字符,那么我认为此答案不仅是您问题的答案。 但是目前,我建议您使用最后一行。