【问题标题】:Laravel whereIn issue with Ajax multiselect checkboxLaravel whereIn 问题与 Ajax 多选复选框
【发布时间】:2017-02-18 05:17:11
【问题描述】:

我有一个多选复选框,用于识别复选框并使用 AJAX Get 将这些值传递给 Laravel 控制器。

当我将 Ajax 数据传递给控制器​​时,json 只返回一个集合。具体来说,它只返回传递的字符串中的第一个值。因此,如果我在复选框中选择 1、2、4、8。它正在返回 category_id = 1 的项目。如果我选择 2、9、10,它只返回 category_id = 2 的项目。为了检查输入是否正确,我将输入传递给 view 和 console.log,它总是说输入是正确的。

我可以检索所有项目,但是当我使用 whereIn 并传递数据时,它只会获取传递数组中第一个值的集合。

我尝试将其放入数组并通过: 1) 将 ajax 数据传递给数组,然后使用 implode 转换为字符串并将其以数组的形式传递给 whereIn 2)直接将数组传递给whereIn

我还附上了几个我尝试失败的查询。

任何建议都会有很大帮助。

ProjectsController

public function getPaginate(Request $request) {

$input  = array(Input::get('categories'));
//$input2 = array($input);
//$value = implode(',', $input);
$sql = [1,2];

$projects = \App\Project::whereIn('category_id' , $sql)->get(); //working 
//$projects = DB::table('projects')->whereIn('category_id', array($value))->get();
//$projects = DB::select("select * from categories INNER JOIN projects on categories.id = projects.category_id where category_id IN('$value')" );


//$projects = \App\Project::paginate(4);
$categories = \App\Category::all();


// $projects = DB::select('select * from categories INNER JOIN projects on categories.id = projects.category_id where category_id IN('.$products.')' );

   // changed for AJAX
   if(Request::ajax()) {


      $projects = \App\Project::whereIn('category_id' ,$input)->get();  //not working
    //$value = implode(',', $input);
    //return Response::json(View::make('layouts.projects',array('projects'=>$input))->render());

  return Response::json(array('projects' =>$projects,'input'=>$input));
    }

    return view('paginate', ['projects' =>$projects,'categories'=>$categories]);
}

Ajax 和 Jquery 选择器

  $(document).ready(function() {
            $('input[type="checkbox"]').on('change', function(event) {
                var checkboxValues = [];
                      $('input[type="checkbox"]:checked').each(function(index, elem) {
                    checkboxValues.push($(elem).val());

                });
                $('#myResponse').html(checkboxValues.join(','));
                categories = checkboxValues.join(',');
                getfilters();
            });
        });

        var getfilters = function () {
            $.ajax({
            type: 'GET',
            headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: '{{URL::route('get.paginate')}}',
            data: {categories: categories},
            error: function(e) {
            console.log(e.responseText);
            },

            success: function (data) {
            console.log(data);
            $('#projects').html(data);

            }});
        };

【问题讨论】:

    标签: php jquery ajax laravel where-in


    【解决方案1】:
    • 调用.get() 将生成的jQuery 对象转换为真正的数组。
    • 使用内置的Array.toString 方法。
    • 最好使用POST 而不是GET
    • array(Input::get('categories')) 更改为Input::get('categories')

    var categories;
    var getfilters = function () {
        $.ajax({
            type: 'POST',
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: '',
            data: {categories: categories},
            error: function(e) {
                console.log(e.responseText);
            },
            success: function (data) {
                console.log(data);
                $('#projects').html(data);
            }});
    };
    
    $(':checkbox').on('change', function(event) {
        event.preventDefault();
        categories = $("input:checkbox:checked").map(function(){
            return $(this).val();
        }).get(); // <----
        $('#myResponse').html(categories.toString()); // <---- 'one,two,three;
        getfilters();
    });
    

    【讨论】:

    • .map 和 .get() 像魅力一样工作!万分感谢。我专注于 php 如何更改数据类型,而不是查询本身。
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2018-09-27
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多