Добрый день!
Застрял на таком вопросе. Как от двух объектов от ActiveRecord создать новый объект со значениями, которые пересекаются друг у друга? Как найти их пересечение?
//пропущенные звонки
$query = Cdr::find()
->Where(['and',
['like', 'calldate', $day],
['like', 'channel', 'Local/'],
['disposition'=>'NO ANSWER'],
['>=', 'duration', '10'],
['dst'=>[170,160,140,120,110]]
])
->groupBy('src')
->orderBy(['calldate'=>SORT_ASC])
;
//пропущенные звонки
//отвеченные звонки
$query2 = Cdr::find()
->Where(['and',
['like', 'calldate', $day],
['like', 'channel', 'Local/'],
['disposition'=>'ANSWERED'],
['>=', 'duration', '10'],
])
->groupBy('src')
->orderBy(['calldate'=>SORT_ASC])
->asArray()
->all();
;
//отвеченные звонки
Как можно сравнить два объекта ActiveRecord
Re: Как можно сравнить два объекта ActiveRecord
получить список названий атрибутов, перебором все сравнить и создать список пересекающихся, создать новый объект
Re: Как можно сравнить два объекта ActiveRecord
Получается тут сам sql запрос такой
И yii2 я сделал как два отдельных запроса. А можно ли это в один запрос сделать?
Код: Выделить всё
select src from cdr
where
calldate LIKE '2017-12-02%' AND
channel LIKE'Local/%' AND
disposition='NO ANSWER' AND
duration >=10 AND
dst in(170,160,140,120,110) AND
src NOT IN (select src from cdr where calldate LIKE '2017-12-02%' AND channel LIKE 'Local/%' AND disposition='ANSWERED' AND duration >=10 GROUP BY src)
GROUP BY src
Код: Выделить всё
//пропущенные звонки
$query = Cdr::find()
->Where(['and',
['like', 'calldate', $day],
['like', 'channel', 'Local/'],
['disposition'=>'NO ANSWER'],
['>=', 'duration', '10'],
['dst'=>[170,160,140,120,110]]
])
->groupBy('src')
->orderBy(['calldate'=>SORT_ASC])
;
//пропущенные звонки
//отвеченные звонки
$query2 = Cdr::find()
->select('src')
->Where(['and',
['like', 'calldate', $day],
['like', 'channel', 'Local/'],
['disposition'=>'ANSWERED'],
['>=', 'duration', '10'],
])
->groupBy('src')
->orderBy(['calldate'=>SORT_ASC])
->asArray()
->all();
;
//отвеченные звонки
Re: Как можно сравнить два объекта ActiveRecord
В условие Where можно добавить подзапрос:
Но я бы обратил Ваше внимание на сам запрос, у Вас дата в таблице в текстовом формате? Почему делаете такую выборку:
Это не очень хорошо.
Код: Выделить всё
['NOT IN', 'src', $query2]
Код: Выделить всё
calldate LIKE '2017-12-02%'