#php #silverstripe
#php #silverstripe
Вопрос:
Как вы можете выбирать строки из таблицы БД на основе нескольких «идентификаторов»?
Совпадение одного ключа
$id = 42;
DataObject::get('Foo')->where("ID = '$id'");
Совпадение нескольких ключей
$id = array(42, 43, 44);
DataObject::get('Foo')->where( ??? );
Во втором случае он должен возвращать список строк с идентификатором 42, 43 или 44.
Комментарии:
1. Не знаком с SilverStripe, но, возможно
IN
, оператор SQL подтолкнет вас в правильном направлении.
Ответ №1:
SilverStripe ORM знает, как создавать where in
запросы:
$ids = array(42, 43, 44);
$items = Foo::get()->byIDs($ids);
Для любых других наборов вы должны использовать DataList::filter()
метод;
$products = Product::get()->filter('Category', array('shirts', 'shoes'));
Комментарии:
1. Приятно знать. Любой простой способ предоставить список данных, например
$ids = Bar::get()->column("TheIDs");
, вместо массива?2. Тогда похоже, что Foo и Bar связаны. Возможно, лучше использовать отношение has_many?
3. Вы правы, я установил
has_many
связь. Я должен иметь возможность перебирать внешнюю таблицу (Foo) в интерфейсе справа?
Ответ №2:
Кажется, это работает:
$id = implode(',', array(42, 43, 44));
$items = DataObject::get('Foo')->where("ID IN ($id)");