プレースホルダーを使用する代わりに。$id と $culture を使用できます。
//first, get an array of the id's
//define your vars
$id = $your_id_param;
$culture = 'en';
$cliente_artistas = ClienteArtistaQuery::create()
->select('id')
->distinct()
->filterByClienteId($id)
->filterByCulture($culture)
->find();
$paginas = PaginaQuery::create()
->where("pagina.id NOT IN ?", $cliente_artistas)
->limit(5)
->find();
これを 1 つのクエリで実行する必要がある場合は、生の SQL を使用してパラメーターを PDO ステートメントにバインドすることをお勧めします (ただし、PropelObjectCollections の利便性は失われます)。
public function getResultSet($id, $culture) {
$id = $id_param;
$culture = $culture_param;
$sql = <<<ENDSQL
SELECT * from pagina
WHERE id NOT IN (SELECT distinct id
FROM cliente_artista
WHERE cliente_id = ?
AND culture = ?
)
LIMIT 5
ENDSQL;
$connection = Propel::getConnection();
$statement = $connection->prepare($sql);
$statement->bindValue(1, $id);
$statement->bindValue(2, $culture);
$statement->execute();
$resultset = $statement->fetchAll(PDO::FETCH_ASSOC); // or whatever you need
if (! count($resultset) >= 1) {
// Handle empty resultset
}
return $resultset;
}
propel orm query methods を使用するために、いくつかのクエリ メソッドを記述することもできます。もちろん、propel apiは有益なリファレンスです。これを行うにはいくつかの方法があります。ここで、あなたに役立つ方法を1つ示しました。
編集:
これを 1 つのクエリとして実行する場合のアイデアを次に示します [useSelectQuery() には「リレーション」名が必要であるため]、このアイデアはテーブルが関連していないと想定していますが、ID は次のとおりです。
$paginas = PaginaQuery::create()
->addJoin(PaginaPeer::ID, ClienteArtistaPeer::CLIENTE_ID, Criteria::LEFT_JOIN)
->where("ClienteArtista.Id <> ?", $id)
->where("ClienteArtista.Culture <> ?", $culture)
->select(array('your','pagina','column','array'))
->limit(5)
->find();