2014-10-13 2 views
1

Я не уверен, какие ключевые слова использовать для поиска ответа, его простые, но ничего не найдено.Операторы 'if' в модели для форматирования фильтра SQL-запросов

Модель используется для запросов sql, насколько я знаю. Нет логики.

Итак, как насчет фильтров?

Например

function getItems($partnerUserId) { 
    $param = ""; 
    $params = array(); 
    if ($partnerUserId !== '') { 
     $param = "AND z.x = ?"; 
     $params[] = $partnerUserId; 
    } 

    $sql = "SELECT ... 
     FROM z 
     WHERE z.a = 1 
     $param"; 

    return DB::connection($connection)->select($sql, $params); 
} 

И в реальном мире, например там получить гораздо больше этих заявлений. Это как модель должна быть или я должен сделать эту логику в контроллере, а затем передать строки фильтра в качестве параметров для функции модели?

+0

Построение SQL-запросов должно происходить в конкретном [преобразователе данных] (http://martinfowler.com/eaaCatalog/dataMapper.html), который отвечает за сохранение определенного объекта домена в пределах слоя модели. –

+0

Хорошо, некоторые фреймворки, такие как PHP laravel, поставляются без datamaper, как я понял из этого: http://stackoverflow.com/questions/16923350/laravel-4-with-data-mapper , так что создатели фрейма предполагают, что это не обязательно , Так как же - без установки дополнительных плагинов? –

+0

Вам не нужно использовать библиотеки для реализации шаблона карт данных. И рамки не имеют к этому никакого отношения. –

ответ

0

это базовая многоуровневая архитектура, построение запроса должно выполняться в классах данных или класса dao. если это какой-то избыточный код или сложный код, вы можете создать утилиту с помощью статического метода и вызвать из уровня карты данных.

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