vendor/doctrine/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
author cavaliet
Wed, 11 Apr 2012 12:07:42 +0200
changeset 86 38ee151428dc
parent 0 7f95f8617b0b
permissions -rwxr-xr-x
remove original label column from all tags list
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * This software consists of voluntary contributions made by many individuals
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * and is licensed under the LGPL. For more information, see
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * <http://www.doctrine-project.org>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
namespace Doctrine\ORM\Mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
use Doctrine\Common\Persistence\Mapping\ClassMetadata;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
use ReflectionClass;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * A <tt>ClassMetadata</tt> instance holds all the object-relational mapping metadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * of an entity and it's associations.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * Once populated, ClassMetadata instances are usually cached in a serialized form.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * <b>IMPORTANT NOTE:</b>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * The fields of this class are only public for 2 reasons:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 * 1) To allow fast READ access.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * 2) To drastically reduce the size of a serialized instance (private/protected members
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 *    get the whole class name, namespace inclusive, prepended to every property in
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 *    the serialized representation).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @author Roman Borschel <roman@code-factory.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @author Jonathan H. Wage <jonwage@gmail.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @since 2.0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
class ClassMetadataInfo implements ClassMetadata
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    /* The inheritance mapping types */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
     * NONE means the class does not participate in an inheritance hierarchy
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
     * and therefore does not need an inheritance mapping type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    const INHERITANCE_TYPE_NONE = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
     * JOINED means the class will be persisted according to the rules of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
     * <tt>Class Table Inheritance</tt>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
    const INHERITANCE_TYPE_JOINED = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
     * SINGLE_TABLE means the class will be persisted according to the rules of
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
     * <tt>Single Table Inheritance</tt>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    const INHERITANCE_TYPE_SINGLE_TABLE = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
     * TABLE_PER_CLASS means the class will be persisted according to the rules
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
     * of <tt>Concrete Table Inheritance</tt>.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    const INHERITANCE_TYPE_TABLE_PER_CLASS = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    /* The Id generator types. */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
     * AUTO means the generator type will depend on what the used platform prefers.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
     * Offers full portability.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    const GENERATOR_TYPE_AUTO = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
     * SEQUENCE means a separate sequence object will be used. Platforms that do
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
     * not have native sequence support may emulate it. Full portability is currently
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
     * not guaranteed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    const GENERATOR_TYPE_SEQUENCE = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
     * TABLE means a separate table is used for id generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
     * Offers full portability.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    const GENERATOR_TYPE_TABLE = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
     * IDENTITY means an identity column is used for id generation. The database
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
     * will fill in the id column on insertion. Platforms that do not support
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
     * native identity columns may emulate them. Full portability is currently
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
     * not guaranteed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    const GENERATOR_TYPE_IDENTITY = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
     * NONE means the class does not have a generated id. That means the class
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
     * must have a natural, manually assigned id.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    const GENERATOR_TYPE_NONE = 5;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
     * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
     * by doing a property-by-property comparison with the original data. This will
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
     * be done for all entities that are in MANAGED state at commit-time.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
     * This is the default change tracking policy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    const CHANGETRACKING_DEFERRED_IMPLICIT = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
     * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
     * by doing a property-by-property comparison with the original data. This will
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
     * be done only for entities that were explicitly saved (through persist() or a cascade).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    const CHANGETRACKING_DEFERRED_EXPLICIT = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
     * NOTIFY means that Doctrine relies on the entities sending out notifications
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
     * when their properties change. Such entity classes must implement
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
     * the <tt>NotifyPropertyChanged</tt> interface.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    const CHANGETRACKING_NOTIFY = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
     * Specifies that an association is to be fetched when it is first accessed.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    const FETCH_LAZY = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
     * Specifies that an association is to be fetched when the owner of the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
     * association is fetched. 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
    const FETCH_EAGER = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
     * Specifies that an association is to be fetched lazy (on first access) and that
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
     * commands such as Collection#count, Collection#slice are issued directly against
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
     * the database if the collection is not yet initialized.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    const FETCH_EXTRA_LAZY = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
     * Identifies a one-to-one association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    const ONE_TO_ONE = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
     * Identifies a many-to-one association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    const MANY_TO_ONE = 2;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
     * Combined bitmask for to-one (single-valued) associations.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
    const TO_ONE = 3;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
     * Identifies a one-to-many association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
    const ONE_TO_MANY = 4;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
     * Identifies a many-to-many association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    const MANY_TO_MANY = 8;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
     * Combined bitmask for to-many (collection-valued) associations.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    const TO_MANY = 12;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
     * READ-ONLY: The name of the entity class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
    public $name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
     * READ-ONLY: The namespace the entity class is contained in.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
     * @todo Not really needed. Usage could be localized.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
    public $namespace;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
     * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
     * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
     * as {@link $entityName}.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
    public $rootEntityName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
     * The name of the custom repository class used for the entity class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
     * (Optional).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    public $customRepositoryClassName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
     * READ-ONLY: Whether this class describes the mapping of a mapped superclass.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
     * @var boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    public $isMappedSuperclass = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
     * READ-ONLY: The names of the parent classes (ancestors).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    public $parentClasses = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
     * READ-ONLY: The names of all subclasses (descendants).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    public $subClasses = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
     * READ-ONLY: The named queries allowed to be called directly from Repository.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
    public $namedQueries = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
     * READ-ONLY: The field names of all fields that are part of the identifier/primary key
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
     * of the mapped entity class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    public $identifier = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
     * READ-ONLY: The inheritance mapping type used by the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
     * @var integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
    public $inheritanceType = self::INHERITANCE_TYPE_NONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
     * READ-ONLY: The Id generator type used by the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
     * @var string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
    public $generatorType = self::GENERATOR_TYPE_NONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
     * READ-ONLY: The field mappings of the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
     * Keys are field names and values are mapping definitions.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
     * The mapping definition array has the following values:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
     * - <b>fieldName</b> (string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
     * The name of the field in the Entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
     * - <b>type</b> (string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
     * The type name of the mapped field. Can be one of Doctrine's mapping types
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
     * or a custom mapping type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
     * - <b>columnName</b> (string, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
     * The column name. Optional. Defaults to the field name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
     * - <b>length</b> (integer, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
     * The database length of the column. Optional. Default value taken from
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
     * the type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
     * - <b>id</b> (boolean, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
     * Marks the field as the primary key of the entity. Multiple fields of an
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
     * entity can have the id attribute, forming a composite key.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
     * - <b>nullable</b> (boolean, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
     * Whether the column is nullable. Defaults to FALSE.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
     * - <b>columnDefinition</b> (string, optional, schema-only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
     * The SQL fragment that is used when generating the DDL for the column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
     * - <b>precision</b> (integer, optional, schema-only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
     * The precision of a decimal column. Only valid if the column type is decimal.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
     * - <b>scale</b> (integer, optional, schema-only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
     * The scale of a decimal column. Only valid if the column type is decimal.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
     [* - <b>'unique'] (string, optional, schema-only)</b>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
     * Whether a unique constraint should be generated for the column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
    public $fieldMappings = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
     * READ-ONLY: An array of field names. Used to look up field names from column names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
     * Keys are column names and values are field names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
     * This is the reverse lookup map of $_columnNames.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    public $fieldNames = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
     * READ-ONLY: A map of field names to column names. Keys are field names and values column names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
     * Used to look up column names from field names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
     * This is the reverse lookup map of $_fieldNames.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
     * @todo We could get rid of this array by just using $fieldMappings[$fieldName]['columnName'].
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    public $columnNames = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
     * READ-ONLY: The discriminator value of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
     * <b>This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
     * where a discriminator column is used.</b>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
     * @var mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
     * @see discriminatorColumn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
    public $discriminatorValue;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
     * READ-ONLY: The discriminator map of all mapped classes in the hierarchy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
     * <b>This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
     * where a discriminator column is used.</b>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
     * @var mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
     * @see discriminatorColumn
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
    public $discriminatorMap = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
     * READ-ONLY: The definition of the descriminator column used in JOINED and SINGLE_TABLE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
     * inheritance mappings.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
    public $discriminatorColumn;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
     * READ-ONLY: The primary table definition. The definition is an array with the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
     * following entries:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
     * name => <tableName>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
     * schema => <schemaName>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
     * indexes => array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
     * uniqueConstraints => array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
    public $table;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
     * READ-ONLY: The registered lifecycle callbacks for entities of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
    public $lifecycleCallbacks = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
     * READ-ONLY: The association mappings of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
     * The mapping definition array supports the following keys:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
     * - <b>fieldName</b> (string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
     * The name of the field in the entity the association is mapped to.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
     * - <b>targetEntity</b> (string)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
     * The class name of the target entity. If it is fully-qualified it is used as is.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
     * If it is a simple, unqualified class name the namespace is assumed to be the same
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
     * as the namespace of the source entity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
     * - <b>mappedBy</b> (string, required for bidirectional associations)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
     * The name of the field that completes the bidirectional association on the owning side.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
     * This key must be specified on the inverse side of a bidirectional association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
     * - <b>inversedBy</b> (string, required for bidirectional associations)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
     * The name of the field that completes the bidirectional association on the inverse side.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
     * This key must be specified on the owning side of a bidirectional association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
     * - <b>cascade</b> (array, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
     * The names of persistence operations to cascade on the association. The set of possible
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
     * values are: "persist", "remove", "detach", "merge", "refresh", "all" (implies all others).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
     * - <b>orderBy</b> (array, one-to-many/many-to-many only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
     * A map of field names (of the target entity) to sorting directions (ASC/DESC).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
     * Example: array('priority' => 'desc')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
     * - <b>fetch</b> (integer, optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
     * The fetching strategy to use for the association, usually defaults to FETCH_LAZY.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
     * Possible values are: ClassMetadata::FETCH_EAGER, ClassMetadata::FETCH_LAZY.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
     * - <b>joinTable</b> (array, optional, many-to-many only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
     * Specification of the join table and its join columns (foreign keys).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
     * Only valid for many-to-many mappings. Note that one-to-many associations can be mapped
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
     * through a join table by simply mapping the association as many-to-many with a unique
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
     * constraint on the join table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
     * - <b>indexBy</b> (string, optional, to-many only)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
     * Specification of a field on target-entity that is used to index the collection by.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
     * This field HAS to be either the primary key or a unique column. Otherwise the collection
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
     * does not contain all the entities that are actually related.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
     * A join table definition has the following structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
     * <pre>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
     * array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
     *     'name' => <join table name>,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
     *      'joinColumns' => array(<join column mapping from join table to source table>),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
     *      'inverseJoinColumns' => array(<join column mapping from join table to target table>)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
     * )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
     * </pre>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
    public $associationMappings = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
     * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
     * @var boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
    public $isIdentifierComposite = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
     * READ-ONLY: Flag indicating wheather the identifier/primary key contains at least one foreign key association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
     * This flag is necessary because some code blocks require special treatment of this cases.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
     * @var boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
    public $containsForeignIdentifier = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
     * READ-ONLY: The ID generator used for generating IDs for this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
     * @var AbstractIdGenerator
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
     * @todo Remove!
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
    public $idGenerator;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
     * READ-ONLY: The definition of the sequence generator of this class. Only used for the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
     * SEQUENCE generation strategy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
     * The definition has the following structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
     * <code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
     * array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
     *     'sequenceName' => 'name',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
     *     'allocationSize' => 20,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
     *     'initialValue' => 1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
     * )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
     * </code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
     * @todo Merge with tableGeneratorDefinition into generic generatorDefinition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
    public $sequenceGeneratorDefinition;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
     * READ-ONLY: The definition of the table generator of this class. Only used for the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
     * TABLE generation strategy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
     * @var array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
     * @todo Merge with tableGeneratorDefinition into generic generatorDefinition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
    public $tableGeneratorDefinition;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
     * READ-ONLY: The policy used for change-tracking on entities of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
     * @var integer
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
    public $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
     * READ-ONLY: A flag for whether or not instances of this class are to be versioned
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
     * with optimistic locking.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
     * @var boolean $isVersioned
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    public $isVersioned;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
     * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
     * @var mixed $versionField
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
    public $versionField;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
     * The ReflectionClass instance of the mapped class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
     * @var ReflectionClass
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
    public $reflClass;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
     * Is this entity marked as "read-only"?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
     * That means it is never considered for change-tracking in the UnitOfWork. It is a very helpful performance
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
     * optimization for entities that are immutable, either in your domain or through the relation database
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
     * (coming from a view, or a history table for example).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
     * @var bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
    public $isReadOnly = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
     * Initializes a new ClassMetadata instance that will hold the object-relational mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
     * metadata of the class with the given name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
     * @param string $entityName The name of the entity class the new instance is used for.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
    public function __construct($entityName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
        $this->name = $entityName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
        $this->rootEntityName = $entityName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
     * Gets the ReflectionClass instance of the mapped class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
     * @return ReflectionClass
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
    public function getReflectionClass()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
        if ( ! $this->reflClass) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
            $this->reflClass = new ReflectionClass($this->name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
        return $this->reflClass;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
     * Sets the change tracking policy used by this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
     * @param integer $policy
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
    public function setChangeTrackingPolicy($policy)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
        $this->changeTrackingPolicy = $policy;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
     * Whether the change tracking policy of this class is "deferred explicit".
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
    public function isChangeTrackingDeferredExplicit()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
        return $this->changeTrackingPolicy == self::CHANGETRACKING_DEFERRED_EXPLICIT;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
     * Whether the change tracking policy of this class is "deferred implicit".
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
    public function isChangeTrackingDeferredImplicit()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
        return $this->changeTrackingPolicy == self::CHANGETRACKING_DEFERRED_IMPLICIT;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
     * Whether the change tracking policy of this class is "notify".
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
    public function isChangeTrackingNotify()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
        return $this->changeTrackingPolicy == self::CHANGETRACKING_NOTIFY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
     * Checks whether a field is part of the identifier/primary key field(s).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
     * @param string $fieldName  The field name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
     * @return boolean  TRUE if the field is part of the table identifier/primary key field(s),
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
     *                  FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
    public function isIdentifier($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
        if ( ! $this->isIdentifierComposite) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
            return $fieldName === $this->identifier[0];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
        return in_array($fieldName, $this->identifier);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
     * Check if the field is unique.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
     * @param string $fieldName  The field name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
     * @return boolean  TRUE if the field is unique, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
    public function isUniqueField($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
        $mapping = $this->getFieldMapping($fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
        if ($mapping !== false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
            return isset($mapping['unique']) && $mapping['unique'] == true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
     * Check if the field is not null.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
     * @param string $fieldName  The field name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
     * @return boolean  TRUE if the field is not null, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
    public function isNullable($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
        $mapping = $this->getFieldMapping($fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
        if ($mapping !== false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
            return isset($mapping['nullable']) && $mapping['nullable'] == true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
        return false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
     * Gets a column name for a field name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
     * If the column name for the field cannot be found, the given field name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
     * is returned.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
     * @param string $fieldName The field name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
     * @return string  The column name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
    public function getColumnName($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
        return isset($this->columnNames[$fieldName]) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
                $this->columnNames[$fieldName] : $fieldName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
     * Gets the mapping of a (regular) field that holds some data but not a
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
     * reference to another object.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
     * @param string $fieldName  The field name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
     * @return array  The field mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
    public function getFieldMapping($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
        if ( ! isset($this->fieldMappings[$fieldName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
            throw MappingException::mappingNotFound($this->name, $fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
        return $this->fieldMappings[$fieldName];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
     * Gets the mapping of an association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
     * @see ClassMetadataInfo::$associationMappings
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
     * @param string $fieldName  The field name that represents the association in
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
     *                           the object model.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
     * @return array The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
    public function getAssociationMapping($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
        if ( ! isset($this->associationMappings[$fieldName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
            throw MappingException::mappingNotFound($this->name, $fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
        return $this->associationMappings[$fieldName];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
     * Gets all association mappings of the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
    public function getAssociationMappings()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
        return $this->associationMappings;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
     * Gets the field name for a column name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
     * If no field name can be found the column name is returned.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
     * @param string $columnName    column name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
     * @return string               column alias
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
    public function getFieldName($columnName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
        return isset($this->fieldNames[$columnName]) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
                $this->fieldNames[$columnName] : $columnName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
     * Gets the named query.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
     * @see ClassMetadataInfo::$namedQueries
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
     * @throws MappingException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
     * @param string $queryName The query name
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
    public function getNamedQuery($queryName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
        if ( ! isset($this->namedQueries[$queryName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
            throw MappingException::queryNotFound($this->name, $queryName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
        return $this->namedQueries[$queryName];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
     * Gets all named queries of the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
    public function getNamedQueries()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
        return $this->namedQueries;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
     * Validates & completes the given field mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
     * @param array $mapping  The field mapping to validated & complete.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
     * @return array  The validated and completed field mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
    protected function _validateAndCompleteFieldMapping(array &$mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
        // Check mandatory fields
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
        if ( ! isset($mapping['fieldName']) || strlen($mapping['fieldName']) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
            throw MappingException::missingFieldName($this->name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
        if ( ! isset($mapping['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
            // Default to string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
            $mapping['type'] = 'string';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
        // Complete fieldName and columnName mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
        if ( ! isset($mapping['columnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
            $mapping['columnName'] = $mapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
            if ($mapping['columnName'][0] == '`') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
                $mapping['columnName'] = trim($mapping['columnName'], '`');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
                $mapping['quoted'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
        $this->columnNames[$mapping['fieldName']] = $mapping['columnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
        if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] == $mapping['columnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
            throw MappingException::duplicateColumnName($this->name, $mapping['columnName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
        $this->fieldNames[$mapping['columnName']] = $mapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
        // Complete id mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
        if (isset($mapping['id']) && $mapping['id'] === true) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
            if ($this->versionField == $mapping['fieldName']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
                throw MappingException::cannotVersionIdField($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
            if ( ! in_array($mapping['fieldName'], $this->identifier)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
                $this->identifier[] = $mapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
            // Check for composite key
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
            if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
                $this->isIdentifierComposite = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
     * Validates & completes the basic mapping information that is common to all
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
     * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
     * @param array $mapping The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
     * @return array The updated mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
     * @throws MappingException If something is wrong with the mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
    protected function _validateAndCompleteAssociationMapping(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
        if ( ! isset($mapping['mappedBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
            $mapping['mappedBy'] = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
        if ( ! isset($mapping['inversedBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
            $mapping['inversedBy'] = null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
        $mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
        // unset optional indexBy attribute if its empty
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
        if (!isset($mapping['indexBy']) || !$mapping['indexBy']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
            unset($mapping['indexBy']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
        // If targetEntity is unqualified, assume it is in the same namespace as
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
        // the sourceEntity.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
        $mapping['sourceEntity'] = $this->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
        if (isset($mapping['targetEntity']) && strpos($mapping['targetEntity'], '\\') === false
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
                && strlen($this->namespace) > 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
            $mapping['targetEntity'] = $this->namespace . '\\' . $mapping['targetEntity'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
        // Complete id mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
        if (isset($mapping['id']) && $mapping['id'] === true) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
            if (isset($mapping['orphanRemoval']) && $mapping['orphanRemoval'] == true) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
                throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
            if ( ! in_array($mapping['fieldName'], $this->identifier)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
                if (count($mapping['joinColumns']) >= 2) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
                    throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
                        $mapping['targetEntity'], $this->name, $mapping['fieldName']
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
                    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
                $this->identifier[] = $mapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
                $this->containsForeignIdentifier = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
            // Check for composite key
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
            if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
                $this->isIdentifierComposite = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
        // Mandatory attributes for both sides
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
        // Mandatory: fieldName, targetEntity
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
        if ( ! isset($mapping['fieldName']) || strlen($mapping['fieldName']) == 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
            throw MappingException::missingFieldName($this->name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
        if ( ! isset($mapping['targetEntity'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
            throw MappingException::missingTargetEntity($mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
        // Mandatory and optional attributes for either side
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
        if ( ! $mapping['mappedBy']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
            if (isset($mapping['joinTable']) && $mapping['joinTable']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
                if (isset($mapping['joinTable']['name']) && $mapping['joinTable']['name'][0] == '`') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
                    $mapping['joinTable']['name'] = trim($mapping['joinTable']['name'], '`');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
                    $mapping['joinTable']['quoted'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
            $mapping['isOwningSide'] = false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
        if (isset($mapping['id']) && $mapping['id'] === true && $mapping['type'] & self::TO_MANY) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
            throw MappingException::illegalToManyIdentifierAssoaction($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
        // Fetch mode. Default fetch mode to LAZY, if not set.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
        if ( ! isset($mapping['fetch'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
            $mapping['fetch'] = self::FETCH_LAZY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
        // Cascades
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
        $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
        if (in_array('all', $cascades)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
            $cascades = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
               'remove',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
               'persist',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
               'refresh',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
               'merge',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
               'detach'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
            );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
        $mapping['cascade'] = $cascades;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
        $mapping['isCascadeRemove'] = in_array('remove',  $cascades);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
        $mapping['isCascadePersist'] = in_array('persist',  $cascades);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
        $mapping['isCascadeRefresh'] = in_array('refresh',  $cascades);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
        $mapping['isCascadeMerge'] = in_array('merge',  $cascades);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
        $mapping['isCascadeDetach'] = in_array('detach',  $cascades);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
        return $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
     * Validates & completes a one-to-one association mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
     * @param array $mapping  The mapping to validate & complete.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
     * @return array The validated & completed mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
     * @override
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
    protected function _validateAndCompleteOneToOneMapping(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
        $mapping = $this->_validateAndCompleteAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
        if (isset($mapping['joinColumns']) && $mapping['joinColumns']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
            $mapping['isOwningSide'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
        if ($mapping['isOwningSide']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
            if ( ! isset($mapping['joinColumns']) || ! $mapping['joinColumns']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
                // Apply default join column
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
                $mapping['joinColumns'] = array(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
                    'name' => $mapping['fieldName'] . '_id',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
                    'referencedColumnName' => 'id'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
                ));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
            $uniqueContraintColumns = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
            foreach ($mapping['joinColumns'] as $key => &$joinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
                if ($mapping['type'] === self::ONE_TO_ONE) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
                    if (count($mapping['joinColumns']) == 1) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
                        $joinColumn['unique'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
                    } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
                        $uniqueContraintColumns[] = $joinColumn['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
                    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
                if (empty($joinColumn['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
                    $joinColumn['name'] = $mapping['fieldName'] . '_id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
                if (empty($joinColumn['referencedColumnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
                    $joinColumn['referencedColumnName'] = 'id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
                $mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
                $mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
                        ? $joinColumn['fieldName'] : $joinColumn['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
            if ($uniqueContraintColumns) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
                if (!$this->table) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
                    throw new \RuntimeException("ClassMetadataInfo::setTable() has to be called before defining a one to one relationship.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
                $this->table['uniqueConstraints'][$mapping['fieldName']."_uniq"] = array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
                    'columns' => $uniqueContraintColumns
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
                );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
            $mapping['targetToSourceKeyColumns'] = array_flip($mapping['sourceToTargetKeyColumns']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
        //TODO: if orphanRemoval, cascade=remove is implicit!
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
        $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
                (bool) $mapping['orphanRemoval'] : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
        if (isset($mapping['id']) && $mapping['id'] === true && !$mapping['isOwningSide']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
            throw MappingException::illegalInverseIdentifierAssocation($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
        return $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
     * Validates and completes the mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
     * @param array $mapping The mapping to validate and complete.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
     * @return array The validated and completed mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
     * @override
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
    protected function _validateAndCompleteOneToManyMapping(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
        $mapping = $this->_validateAndCompleteAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
        // OneToMany-side MUST be inverse (must have mappedBy)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
        if ( ! isset($mapping['mappedBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
            throw MappingException::oneToManyRequiresMappedBy($mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
        //TODO: if orphanRemoval, cascade=remove is implicit!
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
        $mapping['orphanRemoval'] = isset($mapping['orphanRemoval']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
                (bool) $mapping['orphanRemoval'] : false;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
        if (isset($mapping['orderBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
            if ( ! is_array($mapping['orderBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
                throw new \InvalidArgumentException("'orderBy' is expected to be an array, not ".gettype($mapping['orderBy']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
        
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
        return $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
    protected function _validateAndCompleteManyToManyMapping(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
        $mapping = $this->_validateAndCompleteAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
        if ($mapping['isOwningSide']) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
            if (strpos($mapping['sourceEntity'], '\\') !== false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
                $sourceShortName = strtolower(substr($mapping['sourceEntity'], strrpos($mapping['sourceEntity'], '\\') + 1));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
                $sourceShortName = strtolower($mapping['sourceEntity']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
            if (strpos($mapping['targetEntity'], '\\') !== false) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
                $targetShortName = strtolower(substr($mapping['targetEntity'], strrpos($mapping['targetEntity'], '\\') + 1));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
                $targetShortName = strtolower($mapping['targetEntity']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
            
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
            // owning side MUST have a join table
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
            if ( ! isset($mapping['joinTable']['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
                $mapping['joinTable']['name'] = $sourceShortName .'_' . $targetShortName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
            if ( ! isset($mapping['joinTable']['joinColumns'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
                $mapping['joinTable']['joinColumns'] = array(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
                        'name' => $sourceShortName . '_id',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
                        'referencedColumnName' => 'id',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
                        'onDelete' => 'CASCADE'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
            if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
                $mapping['joinTable']['inverseJoinColumns'] = array(array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
                        'name' => $targetShortName . '_id',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
                        'referencedColumnName' => 'id',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
                        'onDelete' => 'CASCADE'));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
            foreach ($mapping['joinTable']['joinColumns'] as &$joinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
                if (empty($joinColumn['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
                    $joinColumn['name'] = $sourceShortName . '_id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
                if (empty($joinColumn['referencedColumnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
                    $joinColumn['referencedColumnName'] = 'id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
                if (isset($joinColumn['onDelete']) && strtolower($joinColumn['onDelete']) == 'cascade') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
                    $mapping['isOnDeleteCascade'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
                $mapping['relationToSourceKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
                $mapping['joinTableColumns'][] = $joinColumn['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
            foreach ($mapping['joinTable']['inverseJoinColumns'] as &$inverseJoinColumn) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
                if (empty($inverseJoinColumn['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
                    $inverseJoinColumn['name'] = $targetShortName . '_id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
                if (empty($inverseJoinColumn['referencedColumnName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
                    $inverseJoinColumn['referencedColumnName'] = 'id';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
                if (isset($inverseJoinColumn['onDelete']) && strtolower($inverseJoinColumn['onDelete']) == 'cascade') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
                    $mapping['isOnDeleteCascade'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
                $mapping['relationToTargetKeyColumns'][$inverseJoinColumn['name']] = $inverseJoinColumn['referencedColumnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
                $mapping['joinTableColumns'][] = $inverseJoinColumn['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
        if (isset($mapping['orderBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
            if ( ! is_array($mapping['orderBy'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
                throw new \InvalidArgumentException("'orderBy' is expected to be an array, not ".gettype($mapping['orderBy']));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
        return $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
     * Gets the identifier (primary key) field names of the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
     * @return mixed
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
    public function getIdentifierFieldNames()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
        return $this->identifier;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
     * Gets the name of the single id field. Note that this only works on
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
     * entity classes that have a single-field pk.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
     * @throws MappingException If the class has a composite primary key.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
    public function getSingleIdentifierFieldName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
        if ($this->isIdentifierComposite) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
            throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
        return $this->identifier[0];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
     * Gets the column name of the single id column. Note that this only works on
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
     * entity classes that have a single-field pk.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
     * @throws MappingException If the class has a composite primary key.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
    public function getSingleIdentifierColumnName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
        return $this->getColumnName($this->getSingleIdentifierFieldName());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
     * INTERNAL:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
     * Sets the mapped identifier/primary key fields of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
     * Mainly used by the ClassMetadataFactory to assign inherited identifiers.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
     * @param array $identifier
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
    public function setIdentifier(array $identifier)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
        $this->identifier = $identifier;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
        $this->isIdentifierComposite = (count($this->identifier) > 1);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
     * Gets the mapped identifier field of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
     * @return string $identifier
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
    public function getIdentifier()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
        return $this->identifier;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
     * Checks whether the class has a (mapped) field with a certain name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
    public function hasField($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
        return isset($this->fieldMappings[$fieldName]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
     * Gets an array containing all the column names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
    public function getColumnNames(array $fieldNames = null)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
        if ($fieldNames === null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
            return array_keys($this->fieldNames);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
            $columnNames = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
            foreach ($fieldNames as $fieldName) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
                $columnNames[] = $this->getColumnName($fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
            return $columnNames;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
     * Returns an array with all the identifier column names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
    public function getIdentifierColumnNames()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
        if ($this->isIdentifierComposite) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
            $columnNames = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
            foreach ($this->identifier as $idField) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
                if (isset($this->associationMappings[$idField])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
                    // no composite pk as fk entity assumption:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
                    $columnNames[] = $this->associationMappings[$idField]['joinColumns'][0]['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
                } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
                    $columnNames[] = $this->fieldMappings[$idField]['columnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
            return $columnNames;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
        } else if(isset($this->fieldMappings[$this->identifier[0]])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
            return array($this->fieldMappings[$this->identifier[0]]['columnName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
            // no composite pk as fk entity assumption:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
            return array($this->associationMappings[$this->identifier[0]]['joinColumns'][0]['name']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
     * Sets the type of Id generator to use for the mapped class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
    public function setIdGeneratorType($generatorType)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
        $this->generatorType = $generatorType;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
     * Checks whether the mapped class uses an Id generator.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
     * @return boolean TRUE if the mapped class uses an Id generator, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
    public function usesIdGenerator()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
        return $this->generatorType != self::GENERATOR_TYPE_NONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
    public function isInheritanceTypeNone()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
        return $this->inheritanceType == self::INHERITANCE_TYPE_NONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
     * Checks whether the mapped class uses the JOINED inheritance mapping strategy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
     * @return boolean TRUE if the class participates in a JOINED inheritance mapping,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
     *                 FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
    public function isInheritanceTypeJoined()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
        return $this->inheritanceType == self::INHERITANCE_TYPE_JOINED;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
     * Checks whether the mapped class uses the SINGLE_TABLE inheritance mapping strategy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
     * @return boolean TRUE if the class participates in a SINGLE_TABLE inheritance mapping,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
     *                 FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
    public function isInheritanceTypeSingleTable()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
        return $this->inheritanceType == self::INHERITANCE_TYPE_SINGLE_TABLE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
     * Checks whether the mapped class uses the TABLE_PER_CLASS inheritance mapping strategy.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
     * @return boolean TRUE if the class participates in a TABLE_PER_CLASS inheritance mapping,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
     *                 FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
    public function isInheritanceTypeTablePerClass()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
        return $this->inheritanceType == self::INHERITANCE_TYPE_TABLE_PER_CLASS;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
     * Checks whether the class uses an identity column for the Id generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
     * @return boolean TRUE if the class uses the IDENTITY generator, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
    public function isIdGeneratorIdentity()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
        return $this->generatorType == self::GENERATOR_TYPE_IDENTITY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
     * Checks whether the class uses a sequence for id generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
     * @return boolean TRUE if the class uses the SEQUENCE generator, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
    public function isIdGeneratorSequence()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
        return $this->generatorType == self::GENERATOR_TYPE_SEQUENCE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
     * Checks whether the class uses a table for id generation.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
     * @return boolean  TRUE if the class uses the TABLE generator, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
    public function isIdGeneratorTable()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
        $this->generatorType == self::GENERATOR_TYPE_TABLE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
     * Checks whether the class has a natural identifier/pk (which means it does
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
     * not use any Id generator.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
    public function isIdentifierNatural()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
        return $this->generatorType == self::GENERATOR_TYPE_NONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
     * Gets the type of a field.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
     * @return Doctrine\DBAL\Types\Type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
    public function getTypeOfField($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
        return isset($this->fieldMappings[$fieldName]) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
                $this->fieldMappings[$fieldName]['type'] : null;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
     * Gets the type of a column.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
     * @return Doctrine\DBAL\Types\Type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
    public function getTypeOfColumn($columnName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
        return $this->getTypeOfField($this->getFieldName($columnName));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
     * Gets the name of the primary table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
    public function getTableName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
        return $this->table['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
     * Gets the table name to use for temporary identifier tables of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
    public function getTemporaryIdTableName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
        // replace dots with underscores because PostgreSQL creates temporary tables in a special schema
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
        return str_replace('.', '_', $this->table['name'] . '_id_tmp');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
     * Sets the mapped subclasses of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
     * @param array $subclasses The names of all mapped subclasses.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
    public function setSubclasses(array $subclasses)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
        foreach ($subclasses as $subclass) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
            if (strpos($subclass, '\\') === false && strlen($this->namespace)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
                $this->subClasses[] = $this->namespace . '\\' . $subclass;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
                $this->subClasses[] = $subclass;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
     * Sets the parent class names.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
     * Assumes that the class names in the passed array are in the order:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
     * directParent -> directParentParent -> directParentParentParent ... -> root.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
    public function setParentClasses(array $classNames)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
        $this->parentClasses = $classNames;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
        if (count($classNames) > 0) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
            $this->rootEntityName = array_pop($classNames);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
     * Sets the inheritance type used by the class and it's subclasses.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
     * @param integer $type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
    public function setInheritanceType($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
        if ( ! $this->_isInheritanceType($type)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
            throw MappingException::invalidInheritanceType($this->name, $type);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
        $this->inheritanceType = $type;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
     * Checks whether a mapped field is inherited from an entity superclass.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
     * @return boolean TRUE if the field is inherited, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
    public function isInheritedField($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
        return isset($this->fieldMappings[$fieldName]['inherited']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
     * Checks whether a mapped association field is inherited from a superclass.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
     * @return boolean TRUE if the field is inherited, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
    public function isInheritedAssociation($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
        return isset($this->associationMappings[$fieldName]['inherited']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
     * Sets the name of the primary table the class is mapped to.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
     * @param string $tableName The table name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
     * @deprecated Use {@link setPrimaryTable}.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
    public function setTableName($tableName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
        $this->table['name'] = $tableName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
     * Sets the primary table definition. The provided array supports the
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
     * following structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
     * name => <tableName> (optional, defaults to class name)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
     * indexes => array of indexes (optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
     * uniqueConstraints => array of constraints (optional)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
     * If a key is omitted, the current value is kept.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
     * @param array $table The table description.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
    public function setPrimaryTable(array $table)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
        if (isset($table['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
            if ($table['name'][0] == '`') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
                $this->table['name'] = trim($table['name'], '`');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
                $this->table['quoted'] = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
                $this->table['name'] = $table['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
        if (isset($table['indexes'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
            $this->table['indexes'] = $table['indexes'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
        if (isset($table['uniqueConstraints'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
            $this->table['uniqueConstraints'] = $table['uniqueConstraints'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
     * Checks whether the given type identifies an inheritance type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
     * @param integer $type
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
     * @return boolean TRUE if the given type identifies an inheritance type, FALSe otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
    private function _isInheritanceType($type)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
        return $type == self::INHERITANCE_TYPE_NONE ||
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
                $type == self::INHERITANCE_TYPE_SINGLE_TABLE ||
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
                $type == self::INHERITANCE_TYPE_JOINED ||
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
                $type == self::INHERITANCE_TYPE_TABLE_PER_CLASS;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
     * Adds a mapped field to the class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
     * @param array $mapping The field mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
    public function mapField(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
        $this->_validateAndCompleteFieldMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
        if (isset($this->fieldMappings[$mapping['fieldName']]) || isset($this->associationMappings[$mapping['fieldName']])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
            throw MappingException::duplicateFieldMapping($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
        $this->fieldMappings[$mapping['fieldName']] = $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
     * INTERNAL:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
     * Adds an association mapping without completing/validating it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
     * This is mainly used to add inherited association mappings to derived classes.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
     * @param array $mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
    public function addInheritedAssociationMapping(array $mapping/*, $owningClassName = null*/)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
        if (isset($this->associationMappings[$mapping['fieldName']])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
            throw MappingException::duplicateAssociationMapping($this->name, $mapping['fieldName']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
        $this->associationMappings[$mapping['fieldName']] = $mapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
     * INTERNAL:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
     * Adds a field mapping without completing/validating it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
     * This is mainly used to add inherited field mappings to derived classes.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
     * @param array $mapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
    public function addInheritedFieldMapping(array $fieldMapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
        $this->fieldMappings[$fieldMapping['fieldName']] = $fieldMapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
        $this->columnNames[$fieldMapping['fieldName']] = $fieldMapping['columnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
        $this->fieldNames[$fieldMapping['columnName']] = $fieldMapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
     * INTERNAL:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
     * Adds a named query to this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
     * @throws MappingException
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
     * @param array $queryMapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
    public function addNamedQuery(array $queryMapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
        if (isset($this->namedQueries[$queryMapping['name']])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
            throw MappingException::duplicateQueryMapping($this->name, $queryMapping['name']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
        $query = str_replace('__CLASS__', $this->name, $queryMapping['query']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
        $this->namedQueries[$queryMapping['name']] = $query;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
     * Adds a one-to-one mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
     * @param array $mapping The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
    public function mapOneToOne(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
        $mapping['type'] = self::ONE_TO_ONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
        $mapping = $this->_validateAndCompleteOneToOneMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
        $this->_storeAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
     * Adds a one-to-many mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
     * @param array $mapping The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
    public function mapOneToMany(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
        $mapping['type'] = self::ONE_TO_MANY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
        $mapping = $this->_validateAndCompleteOneToManyMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
        $this->_storeAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
     * Adds a many-to-one mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
     * @param array $mapping The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
    public function mapManyToOne(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
        $mapping['type'] = self::MANY_TO_ONE;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
        // A many-to-one mapping is essentially a one-one backreference
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
        $mapping = $this->_validateAndCompleteOneToOneMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
        $this->_storeAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
     * Adds a many-to-many mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
     * @param array $mapping The mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
    public function mapManyToMany(array $mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
        $mapping['type'] = self::MANY_TO_MANY;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
        $mapping = $this->_validateAndCompleteManyToManyMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
        $this->_storeAssociationMapping($mapping);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
     * Stores the association mapping.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
     * @param AssociationMapping $assocMapping
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
    protected function _storeAssociationMapping(array $assocMapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
        $sourceFieldName = $assocMapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
        if (isset($this->fieldMappings[$sourceFieldName]) || isset($this->associationMappings[$sourceFieldName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
            throw MappingException::duplicateFieldMapping($this->name, $sourceFieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
        $this->associationMappings[$sourceFieldName] = $assocMapping;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
     * Registers a custom repository class for the entity class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
     * @param string $mapperClassName  The class name of the custom mapper.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
    public function setCustomRepositoryClass($repositoryClassName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
        $this->customRepositoryClassName = $repositoryClassName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
     * Dispatches the lifecycle event of the given entity to the registered
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
     * lifecycle callbacks and lifecycle listeners.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
     * @param string $event The lifecycle event.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
     * @param Entity $entity The Entity on which the event occured.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
    public function invokeLifecycleCallbacks($lifecycleEvent, $entity)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
        foreach ($this->lifecycleCallbacks[$lifecycleEvent] as $callback) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
            $entity->$callback();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
     * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
     * @param string $lifecycleEvent
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
    public function hasLifecycleCallbacks($lifecycleEvent)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
        return isset($this->lifecycleCallbacks[$lifecycleEvent]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
     * Gets the registered lifecycle callbacks for an event.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
     * @param string $event
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
    public function getLifecycleCallbacks($event)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
        return isset($this->lifecycleCallbacks[$event]) ? $this->lifecycleCallbacks[$event] : array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
     * Adds a lifecycle callback for entities of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
     * Note: If the same callback is registered more than once, the old one
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
     * will be overridden.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
     * @param string $callback
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
     * @param string $event
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
    public function addLifecycleCallback($callback, $event)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
        $this->lifecycleCallbacks[$event][] = $callback;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
     * Sets the lifecycle callbacks for entities of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
     * Any previously registered callbacks are overwritten.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
     * @param array $callbacks
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
    public function setLifecycleCallbacks(array $callbacks)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
        $this->lifecycleCallbacks = $callbacks;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
     * Sets the discriminator column definition.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
     * @param array $columnDef
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
     * @see getDiscriminatorColumn()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
    public function setDiscriminatorColumn($columnDef)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
        if ($columnDef !== null) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
            if (isset($this->fieldNames[$columnDef['name']])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
                throw MappingException::duplicateColumnName($this->name, $columnDef['name']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
            if ( ! isset($columnDef['name'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
                throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name, $columnDef);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
            if ( ! isset($columnDef['fieldName'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
                $columnDef['fieldName'] = $columnDef['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
            if ( ! isset($columnDef['type'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
                $columnDef['type'] = "string";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
            if (in_array($columnDef['type'], array("boolean", "array", "object", "datetime", "time", "date"))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
                throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
            $this->discriminatorColumn = $columnDef;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
     * Sets the discriminator values used by this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
     * Used for JOINED and SINGLE_TABLE inheritance mapping strategies.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
     * @param array $map
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
    public function setDiscriminatorMap(array $map)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
        foreach ($map as $value => $className) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
            if (strpos($className, '\\') === false && strlen($this->namespace)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
                $className = $this->namespace . '\\' . $className;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
            $className = ltrim($className, '\\');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
            $this->discriminatorMap[$value] = $className;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
            if ($this->name == $className) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
                $this->discriminatorValue = $value;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
                if ( ! class_exists($className)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
                    throw MappingException::invalidClassInDiscriminatorMap($className, $this->name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
                if (is_subclass_of($className, $this->name)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
                    $this->subClasses[] = $className;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
     * Checks whether the class has a named query with the given query name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
    public function hasNamedQuery($queryName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
        return isset($this->namedQueries[$queryName]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
     * Checks whether the class has a mapped association with the given field name.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
     * @return boolean
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
    public function hasAssociation($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
        return isset($this->associationMappings[$fieldName]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
     * Checks whether the class has a mapped association for the specified field
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
     * and if yes, checks whether it is a single-valued association (to-one).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
     * @return boolean TRUE if the association exists and is single-valued, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
    public function isSingleValuedAssociation($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
        return isset($this->associationMappings[$fieldName]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
                ($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
     * Checks whether the class has a mapped association for the specified field
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
     * and if yes, checks whether it is a collection-valued association (to-many).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
     * @return boolean TRUE if the association exists and is collection-valued, FALSE otherwise.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
    public function isCollectionValuedAssociation($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
        return isset($this->associationMappings[$fieldName]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
                ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
     * Is this an association that only has a single join column?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
     * @param  string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
     * @return bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
    public function isAssociationWithSingleJoinColumn($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
        return (
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
            isset($this->associationMappings[$fieldName]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
            isset($this->associationMappings[$fieldName]['joinColumns'][0]) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
            !isset($this->associationMappings[$fieldName]['joinColumns'][1])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
        );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
     * Return the single association join column (if any).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
    public function getSingleAssociationJoinColumnName($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
        if (!$this->isAssociationWithSingleJoinColumn($fieldName)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
            throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
        return $this->associationMappings[$fieldName]['joinColumns'][0]['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
     * Return the single association referenced join column name (if any).
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
     * @param string $fieldName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
    public function getSingleAssociationReferencedJoinColumnName($fieldName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
        if (!$this->isAssociationWithSingleJoinColumn($fieldName)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
            throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
        return $this->associationMappings[$fieldName]['joinColumns'][0]['referencedColumnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
     * Used to retrieve a fieldname for either field or association from a given column,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
     * This method is used in foreign-key as primary-key contexts.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
     * @param  string $columnName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
    public function getFieldForColumn($columnName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
        if (isset($this->fieldNames[$columnName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
            return $this->fieldNames[$columnName];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
            foreach ($this->associationMappings AS $assocName => $mapping) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
                if ($this->isAssociationWithSingleJoinColumn($assocName) &&
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
                    $this->associationMappings[$assocName]['joinColumns'][0]['name'] == $columnName) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
                    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
                    return $assocName;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
            throw MappingException::noFieldNameFoundForColumn($this->name, $columnName);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
     * Sets the ID generator used to generate IDs for instances of this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
     * @param AbstractIdGenerator $generator
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
    public function setIdGenerator($generator)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
        $this->idGenerator = $generator;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
     * Sets the definition of the sequence ID generator for this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
     * The definition must have the following structure:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
     * <code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
     * array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
     *     'sequenceName' => 'name',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
     *     'allocationSize' => 20,
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
     *     'initialValue' => 1
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
     * )
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
     * </code>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
     * @param array $definition
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
    public function setSequenceGeneratorDefinition(array $definition)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
        $this->sequenceGeneratorDefinition = $definition;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
     * Sets the version field mapping used for versioning. Sets the default
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
     * value to use depending on the column type.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
     * @param array $mapping   The version field mapping array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
    public function setVersionMapping(array &$mapping)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
        $this->isVersioned = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
        $this->versionField = $mapping['fieldName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
        if ( ! isset($mapping['default'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
            if ($mapping['type'] == 'integer') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
                $mapping['default'] = 1;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
            } else if ($mapping['type'] == 'datetime') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
                $mapping['default'] = 'CURRENT_TIMESTAMP';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
            } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
                throw MappingException::unsupportedOptimisticLockingType($this->name, $mapping['fieldName'], $mapping['type']);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
     * Sets whether this class is to be versioned for optimistic locking.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
     * @param boolean $bool
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
    public function setVersioned($bool)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
        $this->isVersioned = $bool;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
     * Sets the name of the field that is to be used for versioning if this class is
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
     * versioned for optimistic locking.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
     * @param string $versionField
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
    public function setVersionField($versionField)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
        $this->versionField = $versionField;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
     * Mark this class as read only, no change tracking is applied to it.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
     * @return void
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
    public function markReadOnly()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
        $this->isReadOnly = true;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
     * A numerically indexed list of field names of this persistent class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
     * This array includes identifier fields if present on this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
    public function getFieldNames()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
        return array_keys($this->fieldMappings);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
     * A numerically indexed list of association names of this persistent class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
     * This array includes identifier associations if present on this class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
     * @return array
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
    public function getAssociationNames()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
        return array_keys($this->associationMappings);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
     * Returns the target class name of the given association.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
     * @param string $assocName
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
    public function getAssociationTargetClass($assocName)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
        if (!isset($this->associationMappings[$assocName])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
            throw new \InvalidArgumentException("Association name expected, '" . $assocName ."' is not an association.");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
        return $this->associationMappings[$assocName]['targetEntity'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
     * Get fully-qualified class name of this persistent class.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
    public function getName()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
        return $this->name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
     * Gets the (possibly quoted) column name of a mapped field for safe use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
     * in an SQL statement.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
     * @param string $field
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
     * @param AbstractPlatform $platform
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
    public function getQuotedColumnName($field, $platform)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
        return isset($this->fieldMappings[$field]['quoted']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
                $platform->quoteIdentifier($this->fieldMappings[$field]['columnName']) :
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
                $this->fieldMappings[$field]['columnName'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
    
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
     * Gets the (possibly quoted) primary table name of this class for safe use
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
     * in an SQL statement.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
     * 
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
     * @param AbstractPlatform $platform
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
    public function getQuotedTableName($platform)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
        return isset($this->table['quoted']) ?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
                $platform->quoteIdentifier($this->table['name']) :
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
                $this->table['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
     * Gets the (possibly quoted) name of the join table.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
     * @param AbstractPlatform $platform
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
     * @return string
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
    public function getQuotedJoinTableName(array $assoc, $platform)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
        return isset($assoc['joinTable']['quoted'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
            ? $platform->quoteIdentifier($assoc['joinTable']['name'])
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
            : $assoc['joinTable']['name'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
}