Skip to content

Add a subquery as where clause to your propel criteria or statement?

So you are still using the propel - the blazing fast php orm but you want to narrow/scope your result by a complex/not daily condition?
No problem you can use a subquery and put it to the where condition area.

$mySubqueryForFoo = '(
    SELECT
        COUNT(*)
    FROM
        ' . FooPeer::TABLE_NAME . '
    WHERE
        ' . FooPeer::BAR_ID . ' = ' . BarPeer::ID . '
) > 0';

//if you are using the criteria object
$criteria->add(
    'my_subquery_for_foo',
    $mySubqueryForFoo,
    Criteria::CUSTOM
);

//if you are using the query object
BarQuerycreate()
->add(
    'my_subquery_for_foo',
    $mySubqueryForFoo,
    Criteria::CUSTOM
);

PHP Propel - add a column (with a sub select) to an result

Assuming you want to add a counting column like "number_of_foo" but you want to use your propel environment. Propel, of course, provides a way how you can achive this.

$criteria = new Criteria();
$criteria->addAsColumn(
    'number_of_foo',
    'SELECT
        COUNT(*)
    FROM
        ' . FooPeer::TABLE_NAME . '
    WHERE
    ' . FooPeer::BAR_ID . ' = ' . BarPeer::ID . '); )

"Quelle surprise", propel can deal with that also in the cooler query way.
$result = BarQuery::create()->addAsColumn(
    'number_of_foo',
    'SELECT
        COUNT(*)
    FROM
        ' . FooPeer::TABLE_NAME . '
    WHERE
        ' . FooPeer::BAR_ID . ' = ' . BarPeer::ID . ');
)

source

create simple and reusable validators using the php requirement component - php component requirement 1.0.4 released

I updated the requirement component to 1.0.4. The new version contains the validator example. By creating this example, i added two new features for upcoming releases, so stay tuned :-).

The example is shipped with a validator collection which contains all needed validator items. It would definitely make more sense, if you would name that validator collection more specific like "IsValidTableForGermany" (or "IsValidUserName" if you want to switch context). All validator items need a injected table example class. Since the requirement component is dealing with automatically injection, you don't have to take care about this :-).

As you can see in the example class, all you have to do is to inject the item you want to validate and call "isMet()". The example itself creates a bunch of tables by choosing random properties.

What are the benefits of using the requirement component also for validation? Reusable and simple testable validator items and a endless flexibility of item combination by using the power of existing and and or condition.

  • add example to use the component as validator

Enjoy it :-).