2016-01-21 1 views
1

Использование Laravel 5.2, у меня есть следующий объем запроса в моей модели:область действия запроса с использованием orWhere в Laravel 5,2

public function scopeInProcess($query) { 
    return $query->whereHas(
     'ApplicationStatus', function($query) { 
      $query->whereRaw('(name = "New" OR name = "In-process")'); 
     } 
    ); 
} 

выше работает отлично, но я только начал использовать whereRaw(), потому что я не мог получить orWhere() к работайте, как описано в документах.

Насколько я могу судить, это должно делать то же самое, что whereRaw():

$query->where('name', 'New')->orWhere('name' , 'In-process'); 

Это не работает, хотя. Он просто возвращает все записи, в том числе и другие имена статусов.

+0

вы добавили «возвращение» перед «$ query-> где (.....);» ? –

ответ

3

Это не точная вещь. В вашем whereRaw() вы заключили оба условия в круглые скобки, чтобы сгруппировать их вместе. Это то, что вы хотите. Тем не менее, where()->orWhere() не выполняет это автоматически.

Чтобы получить желаемую функциональность, вам необходимо сгруппировать свои условия, как в whereRaw(). Вы можете сделать это путем передачи укупорочной методы where(), например, так:

public function scopeInProcess($query) { 
    return $query->whereHas('ApplicationStatus', function($query) { 
     $query->where(function($q) { 
      $q->where('name', 'New')->orWhere('name', 'In-process'); 
     }); 
    }); 
} 
+1

Благодарим вас за решение и за то, что вы так объяснили это! – Joseph

+0

@patricus - Не могли бы вы попытаться ответить на вопрос - https://stackoverflow.com/questions/45031207/laravel-5-2-orwhere-generate-and-in-query? –

 Смежные вопросы

  • Нет связанных вопросов^_^