2

私は2つのテーブルを持っています。1 つは注文用、およびその設定用です。テーブルは次のようになります。

注文:

+----------+---------------+------------+
| orderID  |  orderNumber  |  clientID  |
+----------+---------------+------------+
|    1     |    abc123     |     2      |
|    2     |    orderX     |     7      |
|    3     |    Joe9       |     2      |
|    4     |    Order4     |     2      |
+----------+---------------+------------+

注文優先

+----------+----------+-------------+
| orderID  |  prefID  |  prefValue  |
+----------+----------+-------------+
|    1     |    1     |    $100     |
|    1     |    2     |    123      |
|    1     |    3     |    $35      |
|    2     |    1     |    $600     |
|    2     |    2     |    876      |
|    2     |    3     |    $44      |
+----------+----------+-------------+

私がしたいのは、注文ごとprefValueに、特定の を取得することprefIDです。現在、これは私がやっていることです:

$orders = OrdersQuery::create()->filterByClientID(2)->find();

foreach($orders as $o){
    $prefs = $o->getOrderPrefs();

    foreach($prefs as $p){
        if($p->getPrefID() === 2){
            echo $p->getPrefValue();
            break;
        }
    }
}

これは機能しますが、すべての設定をループせずに、注文ごとに必要な 1 つの行を取得するためのより良い方法が必要です。

これがうまくいかないことはわかっていますが、このようなことはありますか?

$orders = OrdersQuery::create()->filterByClientID(2)->find();

foreach($orders as $o){
    // This obviously doesn't work, so is there a short way to do this?
    echo $o->getOrderPrefs()->filterByPrefID(2)->getPrefValue();
}

ドキュメントを読んで方法を見つけました->search()が、その使用方法がわかりません。

$orders = OrdersQuery::create()->filterByClientID(2)->find();

foreach($orders as $o){
    // How can I search for the row with the prefID I want?
    echo $o->getOrderPrefs()->search()->getPrefValue();
}
4

2 に答える 2

1

私が書いたいくつかの古いPropelのものを見ると、私は次のようなものを推測しています:

$prefValue = OrdersQuery::create()->
    joinOrderPref()->
    where('OrderPref.prefID = ?', $prefId)->
    filterByClientID($clientId)->
    select('OrderPref.prefValue')->
    find()
;

問題は、特定の列 (参照)を取得する必要があることです。

これらの連鎖可能なクエリでは、オートコンプリート エディターがほぼ必須であるというのが私の見解です。構文を覚えておくことは、それなしではほぼ不可能です。

于 2013-05-13T22:19:22.103 に答える