7

Symfony 1.4 と Doctrine を使用しています。

ブランドと製品の2つのクラスがあるとしましょう。

Admin Generator ベースのアドミンで新しい製品を作成するとき、ドロップダウン リストからブランドを選択したいと思います。Admin Generator が自動的にsfWidgetFormDoctrineChoice.

問題は、ブランドが ID 順に並べられていることです。「ラベル」フィールドで並べ替えたいと思います。

ProductFormそのために、クラスで次のことを行いました。

$this->widgetSchema['brand_id']->addOption('order_by','label');

しかし、次のエラーが表示されます。

構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。1行目の「a」付近で使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。 AS b__created_at, b.updated_at AS b__updated_at FROM ブランド b ORDER BY l a"

order by ステートメントは本当に奇妙です。order by ステートメントの名前をカットしているように見える理由がわかりません。

編集:どうやら「order_by」オプションは、2 番目のパラメーターとして配列を想定しています。どのような値が期待されますか?

4

2 に答える 2

19

私が解決策を見つけたときに彼が正しく答えたので、私はベンラムリーの解決策を試しませんでした。私がやったよりも退屈なようです。

ソースコードを見て、これがどのように機能しているかを調べました。「order_by」オプションには、結果を並べ替えるフィールドと「asc」または「desc」のいずれかを指定する配列が必要であることがわかります。

$this->widgetSchema['product_id']->addOption('order_by',array('label','asc'));

それは魅力のように機能します。

于 2010-02-17T14:39:43.970 に答える
2

ここを見てください:

http://trac.symfony-project.org/wiki/HowtoSortAdminGeneratorListByForeignTableName

古いバージョンの symfony に基づいているため、リンクしているプラ​​グインが機能しないと思われます。しかし、メソッドはまだ健全であるべきだと思います-重要なのは、アクションにメソッドを追加して、この特定のフィールドによる並べ替えのデフォルトの処理をインターセプトして修正する必要があることです。

doctrine では addSortQuery を定義/オーバーライドする必要があり、propel では addSortCriteria を定義/オーバーライドする必要があります。

キャッシュ フォルダーを調べて、自動生成されたクラスがどのように機能するかを確認することをお勧めします。

于 2010-02-17T14:08:56.760 に答える