以前对我的问题的描述是错误的。所以我删除它并写一个新的。
有几个表,以下是它们的结构
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中所有复杂的搜索操作。
答案 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();