我有一个过滤器。
过滤器包含三个字段。 Call_Date_From
,Call_Date_Till
,Telephone
。
所以我需要从LEADS
(主要模型)表中选择适合过滤器的所有行。
在原始的Php + MySQL中我会写这样的东西:
$sql = ' WHERE ';
$post['call_date_from'] ? $sql .= ' `call_date` >= ' . $post['call_date_from'];
$post['call_date_till'] ? $sql .= ' AND `call_date` <= ' . $post['call_date_till'];
$post['telephone'] ? $sql .= ' AND `telephone` LIKE %' . $post['telephone'] . '%';
mysql: 'SELECT * FROM LEADS' . $sql;
那么在Laravel Eloquent中如何做到这一点呢?
答案 0 :(得分:0)
这是使用Query Scope在Laravel Eloquent中进行过滤的方法。
在模型中
class Lead extends Model
{
public function scopeCallDateFrom($query, $date)
{
if ($date) {
return $query->where("call_date", ">=", $date);
} else{
return $query;
}
}
public function scopeCallDateTill($query, $date)
{
if ($date) {
return $query->where("call_date", "<=", $date);
} else{
return $query;
}
}
public function scopeTelephone($query, $telephone)
{
if ($telephone) {
return $query->where("telephone", "LIKE", "%$telephone%");
} else{
return $query;
}
}
}
在控制器
中public index()
{
$posts = Lead::CallDateFrom(Input::get('call_date_from'))
->CallDateTill(Input::get('call_date_till'))
->Telephone(Input::get('telephone'))
->orderBy('created_at', 'DESC')
->paginate();
}