繁体   English   中英

Laravel雄辩的ORM和条件语句

[英]Laravel Eloquent ORM and Conditional Statements

我正在尝试将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复制以上内容?

谢谢你的协助

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

$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。 代码已相应更新。

由于您没有提供有关模型的任何信息,因此可以使用查询生成器代替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();

在较新版本的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();

希望对新来者有帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM