2015-08-31 5 views
0

Я хочу создать activeQuery с помощью model :: find() -> где ... , который должен генерировать sql, как показано ниже (не считая логики). Никаких объединений, просто много условий для отдельной таблицы. Я думаю, это должно быть просто, и я просто где-то отсутствует.
Я не могу понять, как создать такое вложенное место, где условия. Любые намеки?PHP Yii2 ActiveRecord с использованием вложенного условия, где условие

select * from article where 
( 
    (site="domain.com" AND service="electronics" AND source="reader" AND tag like "%" AND marker like "%") 
    OR 
    (site="domain.net" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
) 
AND NOT 
( 
    (site="domain.com" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
    OR 
    (site="domain.us" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
) 

ответ

1

Ok Я нашел ответ. Я использовал Model :: find() -> where() и построил вложенные массивы. Таким образом, я могу использовать ActiveRecord и все функции gridview/dataprovider.

0

Самый простой способ может использовать findBySql

этот путь

$myQuery = 'select * from article where 
( 
    (site="domain.com" AND service="electronics" AND source="reader" AND tag like "%" AND marker like "%") 
    OR 
    (site="domain.net" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
) 
AND NOT 
( 
    (site="domain.com" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
    OR 
    (site="domain.us" AND service="electronics" AND source like "%" AND tag like "%" AND marker like "%") 
)'; 

$model = Article::findBySql($myQuery)->all(); 

В противном случае, если вы хотите активного поставщика данных вы можете сделать этот путь

$dataProvider = new ActiveDataProvider([ 
    'query' => Article::findBySql($myQuery)->all(), 
    'pagination' => [ 
     'pageSize' => 10, 
    ], 
    'sort' => [ 
    ........ 
    ], 
]); 
+0

Но если я это сделаю, я не смогу использовать dataprovider и gridview. GridView не будет доступен для поиска/сортировки при использовании findBySql. Я использую findBySql на данный момент, но это очень помогло бы мне, если бы я мог использовать AR. – Kubber

+0

Используя myQuery в качестве значения для запроса, вы можете делать то, что вам нужно (dataProvider). Я обновил ответ – scaisEdge

+0

Я исправлю ответ – scaisEdge

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