2016-10-09 29 views
0

如何根據多個「標識符」從db表中選擇行?SilverStripe db select多個鍵匹配

單鍵匹配

$id = 42; 
DataObject::get('Foo')->where("ID = '$id'"); 

多個密鑰匹配

$id = array(42, 43, 44); 
DataObject::get('Foo')->where(???); 

在第二種情況下,它應該返回有一個ID的行的列表42,43或44

+1

不熟悉SilverStripe,但也許SQL的'IN'運算符會讓您朝着正確的方向發展。 – markusthoemmes

回答

3

SilverStripe ORM知道如何建立where in查詢:

$ids = array(42, 43, 44); 
$items = Foo::get()->byIDs($ids); 

對於你應該使用DataList::filter()方法的任何其他組;

$products = Product::get()->filter('Category', array('shirts', 'shoes')); 
+0

很高興知道。任何簡單的方法來提供DataList像'$ ids = Bar :: get() - >列(「TheIDs」);'而不是數組? – Faloude

+0

然後它看起來像Foo和酒吧是相關的。可能最好使用has_many關係? –

+0

你說得對,我設置了一個'has_many'關係。我應該可以通過前端的外部表(Foo)循環右側? – Faloude

0

這似乎工作:

$id = implode(',', array(42, 43, 44)); 

$items = DataObject::get('Foo')->where("ID IN ($id)");