2

このセットアップは、Propelを使用したPHPプロジェクトにあります(これは初めてです)。

ユーザー:userid、firstname、lastname

サインイン:signinid、userid、time

この場合のSignInは、各ユーザーがサインインした時間を含むテーブルです。

私が欲しいのは、最後の10個のSignInエントリのPropelを使用してJSON文字列を印刷することです。フロントエンドに次のようなものを表示したいと思います。

Bob Builder signed in at 3:30pm
Max Power signed in at 3:24pm
...

そのため、SignInの最後の10エントリをクエリしてから、toJSONを呼び出すときに、そのSignInレコードのユーザーデータもJSONに含めたいと思います。

どうやってやるの?

これを行うためのより良い方法があれば、私はアイデアを受け入れることに注意してください。

4

2 に答える 2

3

Propelについての1つのことは、ドキュメントが本当にきれいで、非常に読みやすく、常に役立つということです。

リクエストについては、次のリクエストを試すことができます。それをよく見てください、それは読みやすいです(いつものようにPropelで)

$signIn = SignInQuery::create()
  ->select(array('User.firstname', 'User.lastname', 'SignIn.time'))
  ->join('User')
  ->orderByTime('desc')
  ->limit(10)
  ->find()
  ->toJson();
于 2013-01-18T08:50:57.000 に答える
1

単なる代替ソリューション:クラス内の任意のメソッドをオーバーライドすることもできます。これを何度も行って、、、、またはメソッドに*Base追加情報を追加しました。toJSONtoArrayfromArray

SignIn.phpの場合:

public function toJSON() {
  $fields = json_decode(parent::toJSON());
  $user = $this->getUser(); // assumes you have a foreign key set up
  $fields->firstname = $user->getFirstname();
  $fields->lastname = $user->getLastname();
  return json_encode($fields);
}

これで、SignInオブジェクトをクエリするだけで、toJSONが呼び出されるたびにユーザーデータが追加されます。

$signIn = SignInQuery::create()
  ->orderByTime('desc')
  ->limit(10)
  ->find()
  ->toJson();

toJSONオーバーライドは、実際にはBaseObjectの一般的な「to [Format]」メソッドのオーバーライドであり、380行目のコード(v1.6)によって処理されることに注意してください。public function __call($name, $params) { ... }

于 2013-01-18T15:38:33.143 に答える