Laravel plus Ajax для реализации панели поиска

Вот мой взгляд ajax часть

function getSearch(){
var sr_s_id= $('#sr_s_id').val();
var sr_name= $('#sr_name').val();
var sr_department= $('#sr_department').val();
var sr_semester= $('#sr_semester').val();
var request = new XMLHttpRequest();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type    :"POST",
url     :"{{url('/management/sutdent')}}",
dataType:"json",
data    :{ s_id:sr_s_id,name:sr_name,department:sr_department,semester:sr_semester },
success :function(response) {
alert(response);
},
error: function(response) {
alert(response);
}
});

}

Вот мой контроллер

public function getSearch(Request $request){
$s_id =$request->s_id;
$name =$request->name;
$department = $request->department;
$semester =$request->semester;
$student_list=$this->UserRepository->getSearchdata($s_id,$name,$department,$semester);
//echo $student_list;

return response()->json($student_list);

}

вот хранилище

public function getSearchdata($s_id=null,$name=null,$department=null,$semester=null){


return $this->user
->select('s_id','name','email','user_info.updated_at as editDate','semester','USN','phone','address','Department')
->leftjoin('user_info','s_id','user_info.school_id')
->where(['r_id','=','1'],['s_id','like',$s_id],['name','like',$name],['department','like',$department],['semester','like',$semester])
->orderBy('s_id','asc')->get();
}

У меня есть два вопроса о моем коде.
Во-первых, когда я нажал кнопку панели поиска, он покажет

сообщение: «Преобразование массива в строку», исключение: «ErrorException»,…}

Я думаю, что это проблема с запросом, но я понятия не имею, как это произошло.

Во-вторых, кто-нибудь есть хорошая идея, чтобы определить значение запроса является нулевым или нет в repository.php? Затем мне нужно отправить результат туда, где используется формат laravel.

В обычном php-файле мы будем использовать объединение строк. подобно

$Where ="something=".$a

if($something!=null)
{
$Where.=",something=".$something;
}

но я понятия не имею, как это сделать на языке ларавеллы.
Кто-нибудь может помочь мне решить эти две проблемы?


Новый вопрос: вывод Json.
Нормально ли показывать первый запрос еще раз?
Я имею в виду ….

{s_id: "ym1234", name: "one", email: "[email protected]", editDate: "2018-04-12 05:54:32",…},…]
0
:
{s_id: "ym1234", name: "one", email: "[email protected]", editDate: "2018-04-12 05:54:32",…}
Department
:
"test"USN
:
"student"address
:
"CS123"editDate
:
"2018-04-12 05:54:32"email
:
"[email protected]"name
:
"one"phone
:
null
s_id
:
"ym1234"semester
:
"105"1
:
{s_id: "ym321", name: "two", email: "[email protected]", editDate: "2018-04-07 23:53:29",…}
Department
:
"test"USN
:
"student"address
:
"CS123"editDate
:
"2018-04-07 23:53:29"email
:
"[email protected]"name
:
"two"phone
:
null
s_id
:
"ym321"semester
:
"106"}]

1

Решение

Я думаю, что вам нужно объединить все условия в одном массиве, где условие, как where([['r_id','=','1'],['s_id','like',$s_id],['name','like',$name],['department','like',$department],['semester','like',$semester]])

Во-вторых, у вас есть ошибка в коде на стороне клиента, и вы можете сгенерировать такую ​​же ошибку — потому что вы собираетесь предупредить объект в формате json. Вы указали dataType : json означает, что ответ преобразуется в формат JSON. Если вы предупреждаете свой объект JSON, тогда ошибка очевидна.

Теперь второй вопрос —

Это то, что я использую в своем фрагменте кода — предполагается, что вы должны иметь следующий код внутри getSearchdata функция

$query = $this->user
->select('s_id','name','email','user_info.updated_at as editDate','semester','USN','phone','address','Department')
->leftjoin('user_info','s_id','user_info.school_id')
->where('r_id','=','1');

if($s_id)
{
$query->where('s_id','=',$s_id);
}
if($name)
{
$query->where('name','like','%'.$name.'%');
}
if($department)
{
$query->where('department','like','%'.$department.'%');
}
if($semester)
{
$query->where('semester','like','%'.$semester.'%');
}
return $query->orderBy('s_id','asc')->get();

Дайте мне знать, работает ли это для вас или нет …

2

Другие решения

Я думаю, что вы забыли добавить [ ] в вашем состоянии где
Измените свою функцию на

public function getSearchdata($s_id=null,$name=null,$department=null,$semester=null){


return $this->user
->select('s_id','name','email','user_info.updated_at as editDate','semester','USN','phone','address','Department')
->leftjoin('user_info','s_id','user_info.school_id')
->where([['r_id','=','1'],['s_id','like',$s_id],['name','like',$name],['department','like',$department],['semester','like',$semester]])
->orderBy('s_id','asc')->get();
}
1

Я думаю твой getSearchdata функция неверна:

    public function getSearchdata($s_id = null, $name = null, $department = null, $semester = null)
{

return $this->user
->select('s_id', 'name', 'email', 'user_info.updated_at as editDate', 'semester', 'USN', 'phone', 'address', 'Department')
->leftJoin('user_info', 's_id', 'user_info.school_id')
->where('r_id', '=', '1')
->where('s_id', 'like', $s_id)
->where('name', 'like', $name)
->where('department', 'like', $department)
->where('semester', 'like', $semester)
->orderBy('s_id', 'asc')->get();

}
0
По вопросам рекламы [email protected]