BaseClass从Eloquent扩展到laravel中处理复杂的搜索条件

时间:2014-07-19 12:35:49

标签: laravel eloquent

以前对我的问题的描述是错误的。所以我删除它并写一个新的。


有几个表,以下是它们的结构

Table1: id, name
Table2: id, name, date1, date2
Table3: id, name, desc
maybe more tables...

还有一些html页面,每一页都引用一个表格。每个页面都有一个或多个搜索框来搜索相关表格中的数据。我使用Ajax来处理搜索工作。我举一些例子如下

Page    related table   search columns       http params
Page1:  Table1          id, name             q={"id": 1, "name":"bill"}
Page2:  Table2          id, date1, date2     q={"id": 1, "date1":"2014-7-19", "date2":"2014-7-20"}
Page3:  Table3          id, name             q={"id": 1, "name":"bill", "desc":"boss"}

然后我想创建一个从Eloquent扩展的BaseModel,然后所有其他特定的Models从BaseModel扩展。 我希望有一个"搜索"它可以处理BaseModel中所有复杂的搜索操作。

1 个答案:

答案 0 :(得分:1)

很难提出一个好的解决方案,因为你并没有真正告诉我们,需要做些什么。

使用查询范围,这是最直接的解决方案:

// BaseModel extending Eloquent Model
public function scopeSearch($query, $jsonSearch)
{
   $wheres = $this->parseSearch($jsonSearch);

   $query->where($wheres); // WHERE X = Y AND Z = A ...
}

protected function parseSearch($jsonSearch)
{
  // validate your input here, make sure it's correct according to your needs
}

然后:

// single result
AnyModel::search($yourJson)->first();

// collection
AnyModel::search($yourJson)->get();

// you can chain more methods if you like
AnyModel::search($yourJson)->where('x', 'y')->orderBy('x')->get();