Я пытаюсь отобразить информацию для одного пользователя в базе данных. Запрос работает нормально, когда я помещаю статическое значение для идентификатора пользователя в оператор where:
where('radcheck.username', '=', '5345855');
но когда я превратил его в динамический, он не работает, и появляется ошибка $ id not found
where('radcheck.username', '=', $id);
Я не знаю, почему я не вижу $id, потому что если я напишу echo $id, он будет успешно распечатан. Это код контроллера:
public function show($id)
{
echo $id;
$result = DB::table('radcheck')
-> leftJoin('radreply', function ($join) {
$join->on('radcheck.username', '=', 'radreply.username')
->where('radcheck.username', '=',$id);
})
->select(
'radcheck.username',
DB::raw("max(case when radcheck.attribute = 'Cleartext-Password' then radcheck.value end) as password"),
DB::raw("max(case when radcheck.attribute = 'Expiration' then radcheck.value end) as expiration"),
DB::raw("max(case when radcheck.attribute = 'ChilliSpot-Max-Total-Octets' then radcheck.value end) as quta"),
DB::raw("max(case when radcheck.attribute = 'Simultaneous-Use' then radcheck.value end) as simul"),
DB::raw("max(case when radcheck.attribute = 'Max-All-Session' then radcheck.value end) as session"),
DB::raw("max(case when radreply.attribute = 'WISPr-Bandwidth-Max-Up' then radreply.value end) as upload"),
DB::raw("max(case when radreply.attribute = 'WISPr-Bandwidth-Max-Down' then radreply.value end) as download"),
DB::raw("max(radcheck.adsoyad) as realname"),
DB::raw("min(radcheck.dtarih) as birthdate"),
DB::raw("min(radcheck.telefon) as phone"),
DB::raw("min(radcheck.tcno) as tc"),
DB::raw("max(radcheck.email) as email"),
DB::raw("min(radcheck.id) as id")
)
->get();
return response()->json(['data' => $result]);
}
Это мое определение маршрута:
Route::resource('users', 'radcheckController');
Я отправляю данные с помощью ajax, и это мой код ajax:
$('.edit-user').on('click', function() {
var id=$(this).data('id');
$.ajax({
type: 'GET',
url: '/users/' + id,
data: {
'_token': $('input[name=_token]').val(),
},
success: function(hr_request) {
alert(hr_request);
var obj=hr_request.data['0'];
alert(obj['username']);
$('#username').val(obj['username']);
$('#password').val(obj['password']);
$('#realname').val(obj['realname']);
$('#mobile').val(obj['phone']);
$('#email').val(obj['email']);
$('#birthdate').val(obj['birthdate']);
$('#simul').val(obj['simul']);
$('#tc').val(obj['tc']);$('#email').val(obj['email']);
$('#date_expir').val(obj['expiration']);
$('#quta').val(obj['quta']/1024/1024);
$('#sessiontime').val(obj['session']/60);
$('#edit-modal-label').html('Edit Selected Row');
$('#addModal').modal('show')
},
error: function(hr_request) {
console.info(hr_request['username']) ;
}
});
});
Итак, мой вопрос: почему запрос не распознает $id?
Я отредактировал свой вопрос @RahulShrivastava
проверь мой ответ






Используйте следующий код, который может работать
public function show($id)
{
echo $id;
$result = DB::table('radcheck')-> leftJoin('radreply', function
($join) use($id) {
$join->on('radcheck.username', '=', 'radreply.username')
->where('radcheck.username', '=',$id);
}) ->select('radcheck.username',
DB::raw("max(case when radcheck.attribute = 'Cleartext-Password' then
radcheck.value end) as password"),
DB::raw("max(case when radcheck.attribute = 'Expiration' then radcheck.value end) as expiration"),
DB::raw("max(case when radcheck.attribute = 'ChilliSpot-Max-Total-Octets' then radcheck.value end) as quta"),
DB::raw("max(case when radcheck.attribute = 'Simultaneous-Use' then radcheck.value end) as simul"),
DB::raw("max(case when radcheck.attribute = 'Max-All-Session' then radcheck.value end) as session"),
DB::raw("max(case when radreply.attribute = 'WISPr-Bandwidth-Max-Up' then radreply.value end) as upload"),
DB::raw("max(case when radreply.attribute = 'WISPr-Bandwidth-Max-Down' then radreply.value end) as download"),
DB::raw("max(radcheck.adsoyad) as realname"),
DB::raw("min(radcheck.dtarih) as birthdate"),
DB::raw("min(radcheck.telefon) as phone"),
DB::raw("min(radcheck.tcno) as tc"),
DB::raw("max(radcheck.email) as email"),
DB::raw("min(radcheck.id) as id")
)
->get();
return response()->json(['data' => $result]);
Это то, что я пытался опубликовать, и увидел ваш ответ таким же.
спасибо за ответ, но он не работает, и когда я добавляю console.info (response () -> json (['data' => $ result])); отображение неопределенной ошибки консоли
Хорошо, тогда как $ id работает без передачи функции использования?
Ответу не хватает объяснения, которое на самом деле гораздо более ценно, чем рабочий фрагмент кода. Причина в том, что только объяснение поможет другим читателям решить аналогичную (но не ту же самую) проблему в будущем, а рабочий фрагмент - нет.
он работал успешно, когда я писал URL-адрес локальный: 8000 / пользователей / 324234123, и он возвращал {"data": [{"username": "324234123", "password": null, "expiration": null}]}, но я не могу получить данные из ajax код
это сработало успешно, спасибо большое за вашу помощь
Необходимо передать переменную внутри функции с помощью ключевого слова use, тогда только к ней можно будет получить доступ внутри нее.
Как это:
$result = DB::table('radcheck')-> leftJoin('radreply', function
($join) use ($id) { // Notice `use ($id)` here.....
$join->on('radcheck.username', '=', 'radreply.username')
->where('radcheck.username', '=', $id);
})
Вы не определили никаких динамических переменных в своих маршрутах:
Route::resource('users','radcheckController');
Чтобы получить доступ к переменным в контроллерах, вы должны сначала определить их в маршрутах:
Route::resource('users/{id}','radcheckController');
Затем вы можете получить доступ к переменной $id в вашем контроллере.
Вы можете передать необходимые переменные из родительской области в замыкание с помощью ключевого слова use.
В вашем случае измените эту строку
$result = DB::table('radcheck')-> leftJoin('radreply', function
($join) {
к этому
$result = DB::table('radcheck')-> leftJoin('radreply', function
($join) use ($id) {
Пожалуйста, проверьте маршрут и используйте этот маршрут и не нужен токен для получения URL
Route :: get ('users / {id}', 'radcheckController @ show');
Вы должны передать переменные из родительской области в замыкание с помощью ключевого слова use. В вашем случае вы забыли передать $ id
Пример:
$result = DB::table('radcheck')-> leftJoin('radreply', function
($join) use ($id) {
$join->on('radcheck.username', '=', 'radreply.username')
->where('radcheck.username', '=', $id);
})
опубликуйте свой маршрут и html