【问题标题】:Fetch data via search from two Table with where condition in Laravel ,vuejs通过在 Laravel ,vuejs 中使用 where 条件从两个表中搜索获取数据
【发布时间】:2020-03-19 17:54:34
【问题描述】:

我想通过键入公司名称而不是公司 ID 来通过搜索从两个表 Employee 和 Company 中获取数据,这些表与一对多的关系链接。它们其余的搜索功能工作完美。任何帮助将不胜感激。

EmployeeController 中的代码是:

 public function search(){

       if($search = \Request::get('q')){

             $employees = Employee::where(function($query) use ($search){
                 $companies = Company::Where('id','company_id');
                $searcompany ?????
                foreach($companies AS $company){ 
                     $searcompany = $company->Company;
                }

                $query->Where('BadgeCode','LIKE',"%$search%")              
                 ->orWhere($searcompany,'LIKE',"%$search%")

            })->orderBy('BadgeCode','desc')->paginate(20);
                            // return $users;
        }        else{
           $employees = Employee::latest()->paginate(5);
                     }
         return $employees;

    }

Employee.vue 中的 HTML 代码是:

<div style="margin-left:450px; margin-top:0px;margin-bottom:-10px;">
              <h3 class="card-title">
                <div class="card-tools">
                  <div class="input-group input-group-sm" style="width: 250px;">
                    <input
                      name="table_search"
                      class="form-control float-right"
                      placeholder="Search"
                      @keyup="searchit"
                      v-model="search"
                      type="search"
                      aria-label="Search"
                    />
                    <div class="input-group-append">
                      <button type="submit" class="btn btn-default" @click="searchit">
                        <i class="fas fa-search"></i>
                      </button>
                    </div>
                  </div>
                </div>
              </h3>
            </div>

Employee.vue 中的脚本代码是:

    export default {
    data() {
        return {
employees :{},
     search: "",
    },
        methods: {
            searchit: _.debounce(() => {
              Fire.$emit("searching");
            }, 300),
    },

    created() {
        Fire.$on("searching", () => {
          let query = this.search;
          axios
            .get("api/findemployee?q=" + query)
            .then(data => {
              this.employees = data.data;
            })

            .catch(() => {});
        });
    }
    }

API 路由是:

Route::get('findemployee','API\EmployeeController@search');

【问题讨论】:

    标签: javascript mysql laravel vue.js eloquent


    【解决方案1】:

    控制器方法看起来设计过度。 你应该这样做。

    $employees = Employee::with('Company')
        ->when($request->filled('q'), function ($query) use ($request) {
            return $query
               ->where('name', 'like', "%$request->q%")
               ->whereHas('Company', function ($query)  use ($request) {
                    return $query->where('name', 'like', "%$request->q%");
                });
        })->paginate(5);
    

    输入您的字段名称。

    【讨论】:

    • 它显示在控制台“消息”中:“调用字符串上的成员函数填充()”,我的公司表名称是具有 id 和公司列的公司
    • 因为你没有得到 Request 作为方法的参数。
    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多