我有以下代码(成员只是一个标准的雄辩模型)
$members = new Member;
$members->where('user_id', '=', 5);
$_members = $members->get();
最后一次查询运行产生" SELECT * from members
",所以它似乎忽略了我的 where 子句,我在这里做错了什么?
顺便说一下,我知道我可以做$members = new Member::where(...)
等等......但我将在循环中添加where
子句,以便对数据库中的结果进行过滤。
更新
解决此问题的唯一方法似乎是添加一个将在初始化时捕获所有内容的位置,例如:
$members = Member::where('member_id', '<>', 0);
$members->where('user_id', '=', 5);
$_members = $members->get();
但这似乎有点黑客。我不想做任何复杂的事情,所以我不能是唯一一个遇到这个问题的人吗?
修复了也许
对于任何在这里跌跌撞撞的人,我已经通过使用:
$members = Member::query();
$members->where('user_id', '=', 5);
$_members = $members->get();
不确定这是否是正确的方法,但它对我有用,看起来不像黑客。
我不相信Eloquent是那样的。
试试这个...
$members = new Member;
$members = $members->where('user_id', '=', 5);
$members = $members->get();
更好的方法可以使用查询范围来实现此处所需的内容。这是您需要做的。
在您的成员.php模型中执行以下操作:
public function scopeMembers($query, $condition1, $condition2)
{
if ( ! empty($condition1))
{
$query = $query->where('column1', $condition1);
}
if ( ! empty($condition2))
{
// Use if ( ! empty($condition2[0]) { $query->whereIn('column2', $condition2); } if you are exploding the input in the controller.
$query = $query->where('column2', $condition2);
}
}
在控制器中执行以下操作:
protected $member;
public function __construct(Member $member)
{
$this->member = $member;
}
public function getMembers()
{
$condition1 = Input::get('condition1');
$condition2 = Input::get('condition2');
$members = $this->member->members($condition1, $condition2)->paginate(10);
return View::make('members', compact('members'));
}
这是一个非常基本的示例,可以根据需要进行扩展。如您所见,您可以根据需要将任意数量的条件传递给查询范围。
你不必打电话吗 查找()而不是 获取()?
$query = Member::where('user_id', 5);
if ( $someCondition )
{
$query->where(....);
}
$members = $query->get();