3

PHP で Phalcon を使用して vcard クラスを作成しました。vCard モデルは次のように初期化されます。

// Inside the BS_VCard class
public function initialize(){
    $this->hasMany("id","BS_VCardElement","vCardId",array(
        "alias" => "elements",
        'foreignKey' => array(
            'action' => Phalcon\Mvc\Model\Relation::ACTION_CASCADE
        )
    ));
}

その要素はこのように初期化されます

// Inside the BS_VCardElement class
public function initialize(){
    $this->belongsTo("vCardId","BS_VCard","id",array("alias" => "vCard"));
    ...
}

ユーザーが vCard を読み取って別の要素を追加すると、期待どおりに機能しません。使用を簡素化するために、このようないくつかの fascade メソッドを追加しました

public function addDateOfBirth($date){
    $element = new BS_VCardElement();
    $element->setName("BDAY");
    $element->addValue($date);
    // This doesn't work
    $this->elements[] = $element;
}

Docs/Storing 関連レコードは、このような新しいデータを関連テーブルに追加する方法を説明していません。

私もこれを試しました

$this->elements[] = array_merge($this->elements,array($element));

しかし、save メソッドは追加された要素を無視しているようです。Save() は true を返します。

4

3 に答える 3

1

この質問は数か月前に尋ねられましたが、同様の問題に遭遇したため、とにかく結果を共有することにしました.

そして、これが私が見つけたものです。小文字のエイリアス (「要素」) は機能しないようですが、大文字のエイリアス (「要素」) は機能します。

要素を 1 つ追加するには、次のようにします。

$this->Elements = $element;

複数の要素を追加するには、これを行うことができます。

$elements = array($element1, $element2);
$this->Elements = $elements;

その後、要素に再度アクセスする前に vcard を保存する必要があります。そうしないと、phalcon はデータベースにすでに存在する要素のみを含む結果セットを返します。(これが何らかの方法で変更できるかどうかはわかりません。)

そして、ここにドキュメントがあります(これはすべて言及されていません):http://docs.phalconphp.com/en/latest/reference/models.html#storing-related-records

于 2014-06-12T09:28:41.217 に答える
0

プロパティを設定すると、関連する要素にいくつかの魔法の機能が呼び出される可能性があるため、単純に $this->elements[] を使用しても (明らかに) 機能しません。おそらく、変数全体を再設定してみてください。

public function addDateOfBirth($date){
    $element = new BS_VCardElement();
    $element->setName("BDAY");
    $element->addValue($date);

    $elements = $this->elements;
    $elements[] = $element;
    $this->elements = $elements;
}
于 2013-08-15T20:33:58.657 に答える