$ id не найден в контроллере laravel

Я пытаюсь отобразить информацию для одного пользователя в базе данных. Запрос работает нормально, когда я помещаю статическое значение для идентификатора пользователя в оператор 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?

опубликуйте свой маршрут и html

Rahul Shrivastava 31.05.2018 08:19

Я отредактировал свой вопрос @RahulShrivastava

Muh 31.05.2018 08:22

проверь мой ответ

Rahul Shrivastava 31.05.2018 08:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
368
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Используйте следующий код, который может работать

      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]);

Это то, что я пытался опубликовать, и увидел ваш ответ таким же.

Himanshu Upadhyay 31.05.2018 08:26

спасибо за ответ, но он не работает, и когда я добавляю console.info (response () -> json (['data' => $ result])); отображение неопределенной ошибки консоли

Muh 31.05.2018 08:28

Хорошо, тогда как $ id работает без передачи функции использования?

Sachin Kumar 31.05.2018 08:34

Ответу не хватает объяснения, которое на самом деле гораздо более ценно, чем рабочий фрагмент кода. Причина в том, что только объяснение поможет другим читателям решить аналогичную (но не ту же самую) проблему в будущем, а рабочий фрагмент - нет.

Namoshek 31.05.2018 08:37

он работал успешно, когда я писал URL-адрес локальный: 8000 / пользователей / 324234123, и он возвращал {"data": [{"username": "324234123", "password": null, "expiration‌": null}]}, но я не могу получить данные из ajax код

Muh 31.05.2018 08:38

это сработало успешно, спасибо большое за вашу помощь

Muh 31.05.2018 08:49

Необходимо передать переменную внутри функции с помощью ключевого слова 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);
      })

Другие вопросы по теме