Тут даже скорее всего виноваты критерии, а не AR
Допустим у нас есть отнаследованные объекты AR.
Задача выбрать объекты определенного класса по критерии.
Критерию создаем типа A or B
- Код: Выделить всё
$criteria1 = lmbSQlCriteria::equal('title','Some other title2');
$criteria2 = lmbSQlCriteria::equal('title','Some other title');
$criteria = new lmbSQlCriteria();
$criteria->addOr($criteria1);
$criteria->addOr($criteria2);
Реально получается типа 1=1 OR A OR B.
Ниже тест. С ходу пофиксить не получилось.
В актив рекорде в строках 1811 - 1818 накладывается условие по классу
- Код: Выделить всё
function addClassCriteria($criteria)
{
if($this->_isInheritable())
return lmbSQLCriteria :: objectify($criteria)->addAnd(array($this->_db_conn->quoteIdentifier(self :: $_inheritance_field) .
$this->getInheritanceCondition()));
return $criteria;
}
Ожидалось что запрос будет такого вида (1=1 OR A OR B) AND kind like "Имя класса1|%"
Однако получилось как-то так 1=1 OR A OR B AND kind like "Имя класса1|%"
Думаю результат понятен. Добавил тест.
- Код: Выделить всё
function testFindWithKind()
{
$object1 = new FooOneTableTestObject();
$object1->setTitle('Some title');
$object1->save();
$object2 = new FooOneTableTestObject();
$object2->setTitle('Some other title');
$object2->save();
$object3 = new BarFooOneTableTestObject();
$object3->setTitle('Some other title');
$object3->save();
$object4 = new BarFooOneTableTestObject();
$object4->setTitle('Some other title2');
$object4->save();
$criteria1 = lmbSQlCriteria::equal('title','Some other title2');
$criteria2 = lmbSQlCriteria::equal('title','Some other title');
$criteria = new lmbSQlCriteria();
$criteria->addOr($criteria1);
$criteria->addOr($criteria2);
$rs = lmbActiveRecord :: find('BarFooOneTableTestObject',array('criteria'=>$criteria));
$this->assertEqual($rs->count(), 2);
}
