如何根据laravel 4中的条件进行方法链接?假设一个值不为false,则内部方法将链接到if语句之前调用的方法。
是否可以在laravel?
$data = User::where('username', $somevariable );
if(isset( $somevar_again ))
{
$data->where('age', 21);
}
$data->orderBy('reg_date', 'DESC')->get();
return $data->first();
//尝试上面的代码,它给了我错误的结果 在codeigniter我可以做到这一点
$this->db->select('e.*, v.name_en as v_name_en')
->from($this->table_name . ' e, ' . $this->ptc_venues . ' v');
$this->db->where('e.venue_id_en = v.id');
if(isset($search)){
$this->db->where('(v.name_en LIKE "%'.$search.'%")');
}
$this->db->limit($limit, $start);
$this->db->order_by('e.added_date_en', 'DESC');
答案 0 :(得分:12)
我相信您的问题发生了,因为您在每次查询构建器方法调用后都没有存储结果查询。
$query = User::query();
// Checking for username if exists
if (!empty($username)) {
$query = $query->where('username', $username);
}
// Check for age if exists
if (isset($age)) {
$query = $query->where('age', $age);
}
// Ordering
$query = $query->orderBy('reg_date', 'DESC');
// Get the first result
// After this call, it is now an Eloquent model
$user = $query->first();
var_dump($user);
答案 1 :(得分:0)
从Laravel 5.2起,您可以使用Conditional Clauses/Statements:
有时您可能希望语句仅在以下情况下适用于查询 别的是真的。例如,您可能只想应用 where语句是否在输入中存在给定的输入值 请求。您可以使用
来完成此操作when
方法
when
方法仅在第一个参数为true时执行给定的Closure。如果第一个参数为false,则不会执行闭包。
您可以使用以下代码:
$data = User::where('username', $somevariable)
->when( isset($somevar_again), function ($query) {
return $query->where('age', 21);
})
->orderBy('reg_date', 'DESC')
->get();
return $data->first();
此外,请注意,Laravel 5.3+的扩展如下:
您可以将另一个闭包作为第三个参数传递给
when
方法。 如果第一个参数的计算结果为 错误