私は、MySQLに次き:のsymfony - 基準にmysqlの()
SELECT t.tag, COUNT(*) AS `count`
FROM tag t, content_item_tag c
WHERE t.id = c.tag_id
GROUP BY t.id, c.tag_id
ORDER BY count DESC
LIMIT 0 , 30
誰かが私はPropelでの基準()クエリにこれを変えるのを助けることはできますか?
おかげ
私は、MySQLに次き:のsymfony - 基準にmysqlの()
SELECT t.tag, COUNT(*) AS `count`
FROM tag t, content_item_tag c
WHERE t.id = c.tag_id
GROUP BY t.id, c.tag_id
ORDER BY count DESC
LIMIT 0 , 30
誰かが私はPropelでの基準()クエリにこれを変えるのを助けることはできますか?
おかげ
はPropelののブログの最新エントリーを参照してください:How Can I Write This Query Using An ORM?次はそこからの引用です:
回答#1:あなたはORMを必要としない
に関する最近のポストメーリングリスト推進、ユーザーは次のクエリのPropelのバージョンを尋ね:
SELECT COUNT(t1.user) AS users, t1.choice AS lft, t2.choice AS rgt
FROM Choices t1 iNNER JOIN Choices t2 ON (t1.user = t2.user)
WHERE t1.choice IN (...) AND t2.choice IN (...)
GROUP BY t1.choice, t2.choice;
をこのクエリは、それは純粋なオブジェクト指向ですされていませんリレーショナルなので、オブジェクト・リレーショナル・マッピングは必要ありません。 ORMの内部でこのクエリを実行するための最良の方法は、直接PDOをORMをスキップして使用することです:純粋なリレーショナル問合せの
<?php
$con = Propel::getConnection();
$query = 'SELECT COUNT(t1.user) AS users, t1.choice AS lft, t2.choice AS rgt
FROM choice t1 iNNER JOIN choice t2 ON (t1.user = t2.user)
WHERE t1.choice IN (?, ?) AND t2.choice IN (?, ?)
GROUP BY t1.choice, t2.choice';
$stmt = $con->prepare($query);
$stmt->bindValue(1, 'foo');
$stmt->bindValue(2, 'bar');
$stmt->bindValue(3, 'baz');
$stmt->bindValue(4, 'foz');
$res = $stmt->execute();
ヒントは以下のとおりです。
のないアイデアを持っていない
このケースでは、あなたが提供したヒント(5と6)には同意しませんが、ORMをスキップすることが最良のアイデアだと思います。 – Jan
Propel Criteriaではなくカスタムクエリを使用するべきだと思います。例:http://stereointeractive.com/blog/2007/06/12/propel-queries-using-custom-sql-peer-classes-and-criterion-objects/ – Aston
Propel 1.5以下で必要ですか? – Jan