У меня есть следующий код (член – это просто стандартная модель Eloquent)
$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();
Не уверен, что это правильный путь, но он работает для меня и не выглядит как хак.
Я не верю, что «Красноречивый» работает так.
Попробуй это…
$members = new Member; $members = $members->where('user_id', '=', 5); $members = $members->get();
Существует гораздо лучший способ достичь того, что вам нужно, используя области запросов . Вот что вам нужно сделать.
В вашей модели Member.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')); }
Это очень простой пример, который можно расширить в зависимости от того, что вам нужно. Как вы можете видеть, вы можете передать столько условий, сколько требуется для области запроса.
Разве вам не нужно было бы называть find () вместо get ()?
$query = Member::where('user_id', 5); if ( $someCondition ) { $query->where(....); } $members = $query->get();