Ben "talk" adında bir tablo, benim schema.xml dosyasında soyut olarak tanımlanır hangi.
Yorum, Değerlendirme, İnceleme, Terrible: Bu 4 nesneleri (ClassKey başına 1) oluşturur
Ayrıca TalkPeer üretir, ama diğer 4 eş (CommentPeer, RatingPeer, ReviewPeer, CheckinPeer) üretmek için alamadım, bu yüzden onları eliyle yaratılmış ve onları BaseTalkPeer devraldığı TalkPeer.php, devralan yaptı. Ben daha sonra bu eş her getOMClass () uygulanmaktadır.
Ben 4 eş kullanarak sorgular yaptığınızda, onlar nesnelerin her 4 türleri dönmek The problem is söyledi. Yani, ReviewPeer Ziyaretler, değerlendirme, yorum ve eleştiri dönecektir.
Example:
$c = new Criteria();
$c->add(RatingPeer::VALUE, 5, Criteria::GREATER_THAN);
$positive_ratings = RatingPeer::doSelect($c);
Bu tüm yorumlar, değerlendirme, yorum döndürür & > 5 bir değere sahip checkins.
ReviewPeer should only return Review objects, and can't figure out how to do this.
Do I actually have to go through and change all my criteria to manually specify the classkey? That seems a little pointless, since the Peer name already distinct. I don't want to have to customize each Peer. I should be able to customize JUST the TalkPeer, since they all inherit from it... I just can't figure out how.
Ben otomatik Kriterlerine ClassKey kısıtlama ekler, böylece sadece TalkPeer içinde doSelectStmt değiştirmeyi denedim. Neredeyse çalışır, ama olsun: Ölümcül hata:. Hattında 503 Hattı 503) (BaseTalkPeer :: populateObjects olduğunu ve aşağıda 3. çizgi içinde / modelleri / om / BaseTalkPeer.php soyut sınıf konuşun örneğini değil miyim:
$cls = TalkPeer::getOMClass($row, 0);
$cls = substr('.'.$cls, strrpos('.'.$cls, '.') + 1);
$obj = new $cls();
docs talked about overriding BaseTalkPeer::populateObject(). I have a feeling that's my problem, hatta kaynak kodu okuduktan sonra, ben hala işe almak için nasıl çözemedim.
İşte TalkPeer :: doSelectStmt denedim budur:
public static function doSelectStmt(Criteria $criteria, PropelPDO $con = null)
{
$keys = array('models.Visit'=>1,'models.Comment'=>2,'models.Rating'=>3,'models.Review'=>4);
$class_name = self::getOMClass();
if(isset($keys[$class_name]))
{ //Talk itself is not a returnable type, so we must check
$class_key = $keys[$class_name];
$criteria->add(TalkPeer::CLASS_KEY, $class_key);
}
return parent::doSelectStmt($criteria, $con = null);
}
Burada ReviewPeer benim getOMClass yöntemin bir örneği aşağıda verilmektedir:
public static function getOMClass()
{
return self::CLASSNAME_4; //aka 'talk.Review';
}
İşte benim şema ilgili biraz:
<table name="talk" idMethod="native" abstract="true">
<column name="talk_pk" type="INTEGER" required="true" autoIncrement="true" primaryKey="true" />
<column name="class_key" type="INTEGER" required="true" default="" inheritance="single">
<inheritance key="1" class="Visit" extends="models.Talk" />
<inheritance key="2" class="Comment" extends="models.Talk" />
<inheritance key="3" class="Rating" extends="models.Talk" />
<inheritance key="4" class="Review" extends="models.Rating" />
</column>
</table>
P.S. - No, I can't upgrade from 1.3 to 1.4. There's just too much code that would need to be re-tested