【问题标题】:“explode() 期望参数 2 是字符串,给定对象” [ Laravel, Vue ]
【发布时间】:2019-12-14 00:56:36
【问题描述】:

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

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>

感谢您的帮助,谢谢!

【问题讨论】:

  • 你能提供更多代码吗?它是否给出了您正在使用.explode 的文件名或行号?
  • 兄弟,我没用explode
  • 但是你正在调用的东西!这将通过查看所有错误消息而不仅仅是摘要来识别。应该有代码文件名和行号
  • 移动 ->paginate($request->per_page);调用到查询的末尾。

标签: php laravel vue.js


【解决方案1】:

你正在这里执行你的查询

$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);
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2018-08-07
    • 2017-08-30
    • 2020-06-01
    相关资源
    最近更新 更多