Ajax Datatable не выполняет поиск с помощью DatePicker - PullRequest
0 голосов
/ 03 января 2019

Я создаю функцию в Laravel вместе с таблицами данных и ajax.У меня есть полностью рабочая страница с несколькими функциями, которые возвращают данные в базу данных, однако одна из функций не любит правильно искать и не возвращает никаких данных в таблицу.

У меня есть сборщик данных сследующий код:

<div class=" input-group mb-3">
    <div class="input-group-prepend">
         <span class="input-group-text"><i class="fas fa-clock"></i></span>
    </div>
    <input class="form-control" type="text" data-plugin-datepicker id="lastLogged" name="lastLogged" placeholder="Owner has not logged in since:">
</div>

Моя кнопка поиска называется: search_data

Мой вызов ajax выглядит следующим образом:

<script>
$(document).on("click", "#search_data", function (e) {
    e.preventDefault();
    $(this).html("<i class='fa fa-circle-o-notch fa-spin'></i>");
    })

    $.ajax({
        url: "/search/user",
        type: "POST",
        dataType: "json",
        headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
        data: {
            loginUser : $('#lastLogged').val()
        }
    })

    .done(function(data) {
        console.log(data);
        table.ajax.reload();
        $('#search_data').html('<i class="fas fa-search"></i>');
    })
    .fail(function(data) {
        console.log(data);
        $('#search_data').html('<i class="fas fa-search"></i>');
    });
});

Мой контроллер PHP:

public function Building(Request $request)
{
    if ($request->ajax()) 
    {           
        $buildings = building::with('ownerinfo');
        $data = array();
        $totalData = building::count();
        $totalFiltered = $totalData; 
        $start = $request->input('start');
        $order = 'id';
        $dir = $request->input('order.0.dir'); 

        // Other if statements here with functions

        if(isset($request->login))
        {
            $date = date("Y-m-d H:i:s",strtotime($request->login));
            $users = Users::where('last_login_in', '<=', $date)->get();
            foreach($users as $user) {

            $buildings = $buildings->where('owner', $user->id);
            }
        }

        $buildings = $buildings->get(); 
        if(!empty($buildings))
        {
            foreach ($building as $building)
            {
                $nestedData['id'] = $building->id;
                $nestedData['name'] = $building->buildingName;
                $nestedData['view'] = '<a class="button is-small full-width is-hovered" href="/view/building/' . $building->id . '">View</a>';
                $data[] = $nestedData;
            }

            $json_data = array( 
                "data" => $data,
                "draw"            => intval($request->input('draw')),  
                "recordsTotal"    => intval($totalData),
                "recordsFiltered" => intval($totalFiltered)
            );
            return json_encode($json_data);
        }
    }
}

Это не возвращает никаких данных вообще.Я использую 1 января 2019 года из средства выбора даты для поиска, он имеет значение: 2019-01-01 00:00:00, а данные одного из пользователей в базе данных имеют 2018-08-20 07:11:34.Я проверил запросы с помощью var_dumps, и он возвращает правильных пользователей, однако он не показывает никаких результатов в зданиях с данными.

Идея заключается в том, чтобы позволить администратору выбрать конкретную дату, база данных запускает поиск и возвращает здания пользователей, которые не вошли в систему с выбранной даты.

Что я делаю не так?

1 Ответ

0 голосов
/ 03 января 2019

$users возвращает правильных пользователей, но $buildings пусто?Попробуйте использовать hasMany отношение между пользователем и построением, это будет лучшим решением, чем это:

foreach($users as $user) { $buildings = $buildings->where('owner', $user->id); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...