@michaelromanov90

Как корректно выбрать строки из бд по коллекции id в Yii2?

Добрый день!
1) Как наиболее корректно в Yii2 (QB) вытащить из базы все строки по id. При этом у меня есть список id(ов), он хранится в массиве, типа
$arr = [
     1, 4, 5
];


2) При этом если в массиве будут повторы, надо вывести только по 1ой записи. (пс в приложении я не могу почистить от повторов этот массив)..

Вопрос в том, как сделать это наиболее корректным способом?
Спасибо!
  • Вопрос задан
  • 574 просмотра
Решения вопроса 3
slo_nik
@slo_nik Куратор тега Yii
Доброй ночи.
Почистить массив от повторяющихся данных можно array_unique
Ну в самом yii2 создать запрос на выборку данных из БД с учётом значений Вашего массива.
Что-то вроде такого запроса
// возвращает покупателей с идентификаторами 100, 101, 123 и 124
// SELECT * FROM `customer` WHERE `id` IN (100, 101, 123, 124)
$customers = Customer::findAll([100, 101, 123, 124]); // передайте сюда свой очищенный от повторений массив


Подробней здесь и здесь

В yii\db\Query есть метод $distinct() и свойство $distinct, при помощи которых Вы можете решить данную проблему, не прибегая к array_unique
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
$arr = [1, 4, 5];
$customers = Customer::find()->andWhere(['id'=>$arr])->all();
Ответ написан
Комментировать
@michaelromanov90 Автор вопроса
эх, к такой штуке asArray() не пределать =(

27.10.16
нашёл решение, может кому-то пригодится! Без лишних объектов, чистый QB
$query = new \yii\db\Query();
        $query->select(['*'])
            ->from('table')
            ->where(array('in', 'id',$data))
            ->all();
        $command = $query->createCommand();
        $res = $command->queryAll();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы