2013-09-22 16 views
0

Недавно я узнал о динамических предложениях (я думаю, это так называется) в Laravel 4 Eloquent, который делает там, где статьи, такие как User::where('first_name', 'Jon')->get(), становятся более приятными User::whereFirstName('Jon')->get(). Насколько это гибко?Laravel 4 Eloquent Dynamic Where Clause

Могу ли я, например, выполнить следующие действия

  • несколько столбцов User::whereFirstNameOrLastName('Jon', 'Smith')->get();
  • использовать оператор, кроме = как >= или LIKE

ответ

5

Вы можете использовать Query Scope добиться того, что вам нужно.

Простая иллюстрация:

public function scopeFirstOrLastName($query, $first, $last) 
{ 
    return $query->where('first_name', 'LIKE', '%' . $first . '%') 
       ->where('last_name', 'LIKE', '%' . $last . '%'); 
} 

С его помощью:

$user->firstOrLastName('John', 'Doe')->get(); 

Вы можете назвать его по своему усмотрению, и вы можете использовать любой оператор (или какой-либо операции построитель запросов) внутри.

+0

Таким образом, вы можете получить SQL-инъекцию. – vinsa

+0

Привет @vinsa, поскольку вы используете QueryBuilder от Laravel, вы должны быть в безопасности от SQL Injection. '' 'Примечание: построитель запросов Laravel использует привязку параметров PDO для защиты вашего приложения от атак SQL-инъекций. Нет необходимости чистить строки, передаваемые как привязки. '' '[Подробнее о запросах] (http://laravel.com/docs/4.2/queries) – JofryHS

+0

Да, вы правы @ JofryHS, этот код проходит через PDO, это будет спасение SQL-инъекций. – vinsa