Php 基于条件的方法链接

Php 基于条件的方法链接,php,laravel,laravel-4,Php,Laravel,Laravel 4,如何根据laravel 4中的条件进行方法链接?假设一个值不为false,则内部的方法将链接到if语句之前调用的方法 在拉雷维尔有可能吗 $data = User::where('username', $somevariable ); if(isset( $somevar_again )) { $data->where('age', 21); } $data->orderBy('reg_date', 'DESC')->get(); return $data->fir

如何根据laravel 4中的条件进行方法链接?假设一个值不为false,则内部的方法将链接到if语句之前调用的方法

在拉雷维尔有可能吗

$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');

我相信您的问题是因为您没有在每次查询生成器方法调用后存储生成的查询

$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);

从Laravel 5.2及以后,您可以使用:

有时,您可能希望语句仅在以下情况下应用于查询: 有些事情是真的。例如,您可能只想应用 where语句,如果传入服务器上存在给定的输入值 要求您可以使用
when
方法完成此操作

when
方法仅在第一个参数为true时执行给定的闭包。如果第一个参数为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();
此外,请注意,它已进一步扩展,如下所述:

当 方法如果第一个参数的计算结果为 错误

您正在调用
get()
,它返回所有结果,然后调用
first()
,它基本上将
LIMIT 1
添加到生成的SQL查询中并运行它。为什么要调用
->get()
?几乎相关页面: