首页 > 解决方案 > “explode() 期望参数 2 是字符串,给定对象” [ Laravel, Vue ]

问题描述

我想search functionality使用 vue.js 在 laravel 中实现一个,但我得到了一个错误

explode() expects parameter 2 to be string, object given

我坚持它,我仍然无法让它工作。

我做错了什么?

这是我的控制器

     公共功能索引(请求 $request)
     {
        $query = Employee::orderBy($request->column, $request->direction)
                            ->分页($request->per_page);
        如果($请求->搜索){
            $query->where(function($query) 使用 ($request) {
                $query->where('emp_name', 'like', '%' . $request->search . '%')
                ->orWhere('salary', 'like', '%' . $request->search . '%');
            });
        }
        返回 EmployeeResource::collection($query);
     }
    

我的模板

  <pre>

       <div class="form-group"> 
            <input type="text" 
                placeholder="Search" 
                v-model="query.search" 
                @keyup.enter="fetchUser()">
        </div>

  </pre>

还有我的 Vue.js 代码

 <pre>

  export default {

    props: ['source'],

    mounted() {
        this.fetchUser();
    },

    data() {
        return {
            emp: [],
            columns: [                   
       'ID','Emp_name','salary','phone_number','created_at'
            ],

            query: {
                page: 1,
                column: 'id',
                direction: 'desc',
                per_page: 5,
                search: ''
            },

            pagination: {}
        }
    },

    methods: {

        prev() {
            if(this.pagination.prev) {
                this.query.page--;
                this.fetchUser();
            }
        },

        next() {
            if(this.pagination.next) {
                this.query.page++;
                this.fetchUser();
            }
        },

        fetchUser() {
            fetch(`${this.source}?column=${this.query.column}&direction=${this.query.direction}&page=${this.query.page}&per_page=${this.query.per_page}&search=${this.query.search}`)
            .then(res => res.json())
            .then(res => {
                this.emp = res.data;            
                this.pagination = {
                    prev: res.links.prev,
                    next: res.links.next,
                }
            })

        },

        toggleOrder(column) {
            if(column == this.query.column) {
                if(this.query.direction === 'desc') {
                    this.query.direction = 'asc';
                } else {
                    this.query.direction = 'desc';
                } 
            } else {
                this.query.column = column;
                this.query.direction = 'asc';
            }

            this.fetchUser();
        }

      }
  }
 </pre>

我将感谢您的所有帮助,谢谢!

标签: phplaravelvue.js

解决方案


你在这里执行你的查询

$query = Employee::orderBy($request->column, $request->direction)
                            ->paginate($request->per_page);

这意味着您在这里有一个结果,而不是查询构建器实例了。您必须在搜索查询之后移动 paginate() 才能使其工作。

     public function index(Request $request)
     {
        $query = Employee::orderBy($request->column, $request->direction);

        if($request->search) {
            $query->where(function($query) use ($request) {
                $query->where('emp_name', 'like', '%' . $request->search . '%')
                ->orWhere('salary', 'like', '%' . $request->search . '%');
            });
        }

        $employees = $query->paginate($request->per_page); // execute the query

        return EmployeeResource::collection($employees);
     }


推荐阅读