0

私は phalcon を初めて使用し、Symfony のバックグラウンドから来ました。phalcon モデルで外部キー間のオプションの関係を定義する方法を知る必要があるだけです。

つまり、Users テーブル PK は user_id であり、ユーザーは Photos テーブルに (オプションの) 関連レコードを持ち、プライマリ キー photo_id を持つ写真を持ち、'user_id' でリンクされている可能性があります。

したがって、私のファルコンモデルでは、写真がある場合はユーザーに写真をロードする必要があります。

ユーザーモデルで

 public function initialize()
{
    $this->hasMany(
        "photo_id",
        "Photo",
        "photo_id",
        array(
            'alias' => 'photos'
        )
    );
}

写真モデルで私はそれを次のように書きます

public function initialize()
{
    $this->belongTo(
        "user_id",
        "User",
        "user_id",
        array(
            'alias' => 'user'
        )
    );
}

経由でアクセスするためのボルトで

{{user.photo.photo_id}}

しかし、これは私にエラーを与えます

Undefined property: Phalcon\Mvc\Model\Resultset\Simple::$photo_id

何か案が ?

奇妙なことに、コントローラーでこのコードを実行すると、機能して写真モデルを取得できますが、遅延読み込みでアクセスしようとすると機能しません/

$users = User::find(array(
"limit" => 10)
);
echo "There are ", count($users), "\n";
foreach($users as $user){
$photos = Photo::find(array(
"user_id=:user_id:",
"limit" => 10,
"bind" => array("user_id" => $user->user_id)
)
);
if($photos->count()==0){
echo "<br />";
echo "No photo found for user".$user->user_id;
}
foreach($photos as $photo){
echo '<br />';
echo "User ->".$photo->user_id." Photo -> ".$photo->photo_id;
}
}

このように遅延読み込みでやろうとすると

foreach($users as $user){
    //echo $user->photos->photo_id;
    foreach($user->photos as $photo){
        echo '<br />';
        echo "User ->".$photo->user_id."  Photo -> ".$photo->photo_id;
    }
 }

エラーが発生します:

未定義のプロパティ: Phalcon\Mvc\Model\Resultset\Simple::$photo_id

4

2 に答える 2

2

リレーションを使用する$this->hasMany()場合は、すべてのレコードを反復処理する必要があります。

{% for userPhoto in user.photo %}
    {{ userPhoto.photo_id }}
{% else %}
    User has no photos
{% endfor %}

モデル名も確認します (モデル クラス名と同じである必要があります)。

$this->hasMany(
    "users_id",
    "Photos",
    "photo_id",
    array(
        "alias" => "photo"
    )
);

また、単一のエイリアス for を追加するhasManyと混乱する可能性があるため (以前のバージョンの回答では 1 対 1 の関係が想定されていました)、このエイリアスに"photos"notという名前を付け"photo"ます。

一方、User1 つしか持てない場合はPhoto、 を使用します$this->hasOne()

例:

        $this->hasOne(
            'photo_id',
            'Photos',
            'id',
            array('alias' => 'photo')
        );

データベース構造:

Users: id, photo_id // other like name, email
Photos: id // other, like url, type, etc

$this->photo->photo_id次に、データベースに関連データがある場合に使用できます。

最も簡単な解決策は次のとおりです。

{% if user.photo %}{{ user.photo.photo_id }}{% endif %}

第二に、エラー:hasManyリレーション Phalcon を使用すると、複数の関連オブジェクトを検索した結果が得られます (つまりPhalcon\Mvc\Model\Resultset\Simple、 のような「複数のオブジェクトを検索」のデフォルトの戻り値ですModel::find())。

于 2014-10-07T06:48:48.310 に答える