我正在尝试使用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复制上述内容?
感谢您的协助
答案 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();
希望这会对新人有所帮助