Laravel Eloquent ORM和条件陈述

时间:2014-08-02 15:32:16

标签: php laravel eloquent

我正在尝试使用Laravel的Eloquent ORM和条件语句,例如,在Codeigniter中我可以使用以下语法来过滤我的数据库结果;

<?php
      $this->db->select('*')->from('demos'); 

      if (isset($data) && is_numeric($data) ) 
      {
         $this->db->where('type_id', $data);
      } 

      if (isset($name) && is_string($name) ) 
      {
         $this->db->where('name', $name);
      }

      return $this->db->get(); ?>

我尝试了同样的实现,似乎没有用;如何使用Eloquent复制上述内容?

感谢您的协助

3 个答案:

答案 0 :(得分:7)

如果您已设置模型,请尝试以下操作:

$demos = Demo::query();
if (isset($data) && is_numeric($data) )
{
    $demos->where('type_id', $data);
}
if (isset($name) && is_string($name) )
{
    $demos->where('name', $name);
}

return $demos->get();

感谢@JofryHS的建议。代码已相应更新。

答案 1 :(得分:0)

由于您未提供有关模型的任何信息,因此您可以使用查询生成器而不是Eloquent。

$data = Input::get('data', null);
$types = DB::table('demos')->where('type_id', '=', $data)->get();

和第二部分

$name = Input::get('name', null);
$names = DB::table('demos')->where('name', '=', $name)->get();

你也可以将它缩短为

$data = Input::get('data');
$types = DB::table('demos')->whereData($data)->get();

$name = Input::get('name');
$names = DB::table('demos')->whereName($name)->get();

修改

在评论之后,我发现应该连接查询。

$data = Input::get('data');
$name = Input::get('name');
$result = DB::table('demos')
             ->where('type_id', $data)
             ->whereName($name)
             ->get();

答案 2 :(得分:0)

在较新版本的Laravel(5.2.27及更高版本)中,您实际上可以执行类似的操作:

$results = DB::table('orders')
->when($request->customer_id, function($query) use ($request){
    return $query->where('customer_id', $request->customer_id);
})
->get();

希望这会对新人有所帮助