2

3 つのエンティティUsersUserProfileあり、Staffs

ユーザー プロファイルは、ユーザー ID を使用してユーザー テーブルにリンクされます スタッフ テーブルは、userprofileid を使用してユーザー プロファイルにリンクされます

管理者はユーザー プロファイルを作成し、登録番号、ユーザー名、およびパスワードを生成します。

ユーザー テーブルにユーザー レコードを追加し、ユーザー プロファイルを追加してから、プロファイル ID をスタッフ テーブルに追加します。

3 つのエンティティを連続して保持したい

次のようなユーザーのインスタンスを作成しようとしました

$this->userent->setUsername('xxx');
$this->em->persist($this->userent);
$this->em->flush();

それから:

$this->profileent->setFirstname('xxx');
$this->em->persist($this->profileent);
$this->em->flush();

基本的にフォームは3つのエンティティで共有されており、3つのテーブルに順番に挿入したいのですが、

更新しました

エンティティとは別に、ユーザーにリンクされusersusertypeエンティティがあります...外部キーのみを保持したいです。私は持っている

setUserType(Usertype $userType)users 内の user_type エンティティのインスタンスをメソッド化する

私がする時

 $this->userent = new Users();
$this->userent->setUserType($this->em->getRepository('\Campus\Entity\Usertype')->findByUserType("admin")) 

エラーが発生します

Argument 1 passed to Campus\Entity\Users::setUserType() must be an instance of Campus\Entity\Usertype, array given

Usertype のインスタンスである配列の値を渡す場合

ArrayCollection の配列が必要だというエラーが表示されます。助けてください!!!

Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be of the type array, object given, called in D:\xampp\htdocs\zend\library\Doctrine\ORM\UnitOfWork.php on line 406 defined in D:\xampp\htdocs\zend\library\Doctrine\Common\Collections\ArrayCollection.php on line 46
4

2 に答える 2

5

データベースについて考えるよりも、オブジェクトについて考えてください。それが教義の要点です。

次のようなものが必要です。

<?php
// create some entities

$user = new Entity\User();
$user->setUsername('userman');

$profile = new Entity\UserProfile();
$profile->setFirstname('joe');
$profile->setLastname('smith');

$staff = new Entity\Staff();
$staff->setSomething('value-for-something');

// associate those entities together
$profile->setStaff($staff);
$user->setProfile($profile);

// assuming you have set up cascade={"persist"} on your associations
$this->em->persist($user);

// if you haven't set up cascade={"persist"}, you will need to call persist on each entity:
// $this->em->persist($profile);
// $this->em->persist($staff);

$em->flush();

したがって、基本的な考え方は、オブジェクトを構築し、それらを Doctrine の Unit-of-Work に入れ (persist() を呼び出し、場合によってはいくつかのカスケードを設定することにより)、flush を呼び出すことにより単一のトランザクションでそれらすべてをデータベースに書き込むことです。 ()

于 2012-09-10T22:09:34.743 に答える
1

各エンティティを永続化してから、最後に一度 flush() することができます。

エンティティ間に関係がある場合は、次の注釈を確認できます

cascade={"persist"}

「カスケードは、関連付けられたエンティティへの操作を永続化します。」

こちらのドキュメントをご覧ください: http://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations

于 2012-09-10T08:06:37.123 に答える