<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isac</id>
	<title>Joomla! Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.sandbox.joomla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Isac"/>
	<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/Special:Contributions/Isac"/>
	<updated>2026-07-04T00:42:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502698</id>
		<title>J4.x:Joomla Entities</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502698"/>
		<updated>2018-08-12T17:22:12Z</updated>

		<summary type="html">&lt;p&gt;Isac: /* Filtering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|text-color=#333|title=&lt;br /&gt;
GSoC 2018 &amp;lt;br /&amp;gt;&lt;br /&gt;
Joomla Entities&amp;lt;br /&amp;gt;Documentation}}&lt;br /&gt;
[[Image:Gsoc2016.png|75px|center|link=GSOC 2018]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=4.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
The scope of this year project is to build and integrate a new Model system into Joomla 4, that will solve some of the current issues from the Webservices project, as well as improve the limits of the current system. The integration will be fully implemented by the release of Joomla 4.0 in the com_content component. The purpose for this documentation is to outline how to use the underlaying Entities project, which can be then used by developers to write new extensions and convert existing ones.&lt;br /&gt;
&lt;br /&gt;
Entities! The entities project is the base project. Without it we would not be able to accomplish the tasks in the Webservices project. Starting as a new project, I have managed to get a basic implementation going of an Active Record pattern based layer that shall be used as a dependency in Joomla CMS, to implement each table as a DAO. &lt;br /&gt;
&lt;br /&gt;
The need for this project comes from the limitations of the current Model architecture which have been reached during the last year GSoC Webservices [https://joomla-projects.github.io/gsoc18_webservices/?specification/introduction.md project].&lt;br /&gt;
&lt;br /&gt;
Because by reaching these limitations, it was clear that the Model layer had to be redone. Taking it a step further, with the desire to make development in Joomla easier, the Entities [https://github.com/joomla-projects/entities project] was born. The main highlights of this approach is that we can now have relations in our models, feature that has been long missed in Joomla models. Up to now, the One to One and One To Many relations have been implemented.&lt;br /&gt;
&lt;br /&gt;
The project fits perfectly in the Joomla ecosystem, as it is using the joomla-framework/database DatabaseDriver for the connection to various database systems. We have decided that the next step would be actually integrating the Entities project in Joomla CMS, in the lib_api branch of the last year webservices project. Taking a step back from implementing features in a separate project, and actually connecting the dots with the CMS implementation will give us important insights about the features that will be needed in the future.&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
The entities project can be easily integrated into any php project by adding the following dependency to your composer file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;config&amp;quot;: {&lt;br /&gt;
    &amp;quot;preferred-install&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/event&amp;quot;: &amp;quot;dist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;require&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/entities&amp;quot;: &amp;quot;dev-master&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
&lt;br /&gt;
=== Defining Entities === &lt;br /&gt;
&lt;br /&gt;
* Table - The table name should have &#039;#__&#039; as a prefix. The Entity also sets a default table name in case none is specified by the developer. The default value is the pluralised and underscore separated Class name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The table associated with the model.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected $table = &#039;#__content&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamps - specify is the current entity uses timestamps or not. If it does, special column aliases need to be specified for the &#039;createdAt&#039; and &#039;updatedAt&#039; columns. These two columns are handled automatically by the project when creating or updating the entity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicates if the model should be timestamped.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var boolean&lt;br /&gt;
	 */&lt;br /&gt;
	public $timestamps = false;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Column Aliases - having the same functionality as in the current Joomla implementation, they provide a way to be able to refer at different column names across different components with one name in case they fulfil the same functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Array with alias for &amp;quot;special&amp;quot; columns such as ordering, hits etc etc&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $columnAlias = [&lt;br /&gt;
		&#039;createdAt&#039; =&amp;gt; &#039;created&#039;,&lt;br /&gt;
		&#039;updatedAt&#039; =&amp;gt; &#039;modified&#039;,&lt;br /&gt;
		&#039;published&#039; =&amp;gt; &#039;state&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Casts - Used to cast database raw strings into usable types in PHP. Two most common use cases are &#039;int&#039; and &#039;array&#039;. The latter is specifically useful as it transforms json columns into key indexed arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be cast to native types.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $casts = [&lt;br /&gt;
		&#039;params&#039; =&amp;gt; &#039;array&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dates - used to cast dates to Carbon instances&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be mutated to dates. Already aliased!&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $dates = [&lt;br /&gt;
		&#039;registerDate&#039;,&lt;br /&gt;
		&#039;lastvisitDate&#039;,&lt;br /&gt;
		&#039;lastResetTime&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Hidden - used to hide certain columns from serialisation. E.g. passwords.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be hidden for serialization.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $hidden = [&lt;br /&gt;
		&#039;password&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* With - eager load relations into the entity. If not specified, the relations are lazy loaded. The primary key and foreign key are mandatory if the relation is loaded with constraints(selecting only some of the columns for efficiency purposes)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The relations to eager load on every query.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 * @todo add to docs: &lt;br /&gt;
	 */&lt;br /&gt;
	protected $with = array(&lt;br /&gt;
		&#039;sentMessages:message_id,subject,user_id_from&#039;&lt;br /&gt;
	);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Defining Entities Relations === &lt;br /&gt;
&lt;br /&gt;
* HasOne - One to One relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-one relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasOne&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasOne($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the profile for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function profile()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasOne(&#039;Joomla\Entity\Tests\Models\UserProfile&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* HasMany - One to Many relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasMany&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasMany($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the sent messages for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function sentMessages()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasMany(&#039;Joomla\Entity\Tests\Models\Message&#039;, &#039;user_id_from&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* BelongsTo - Reverse relation for One to One or One to Many.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define an inverse one-to-one or many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $relation   relation name, must be the same as the caller function&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $ownerKey   the associated key on the parent model.&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\BelongsTo&lt;br /&gt;
	 */&lt;br /&gt;
	public function belongsTo($related, $relation, $foreignKey = null, $ownerKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the author for the current article.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function author()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;belongsTo(&#039;Joomla\CMS\Entity\User&#039;, &#039;author&#039;, &#039;created_by&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Queries Using The Entity === &lt;br /&gt;
The following default functionalities are available for the entities:&lt;br /&gt;
&lt;br /&gt;
* Find - finds an entity or a Collection of entities by their primary keys. In addition, the columns that are desired to be loaded can be specified. By default, we load all the columns.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Find a model by its primary key.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   mixed  $id      primary key&lt;br /&gt;
	 * @param   array  $columns columns to be selected in query&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return Model|boolean&lt;br /&gt;
	 */&lt;br /&gt;
	public function find($id, $columns = [&#039;*&#039;])&lt;br /&gt;
	&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Insert - This is the way to insert a new row in a table. First we create a new entity using the desired attribute, next we persist it to the database.&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$attributes = [&lt;br /&gt;
			&#039;email&#039; =&amp;gt; &amp;quot;test@test.com&amp;quot;,&lt;br /&gt;
			&#039;params&#039; =&amp;gt; [&#039;test&#039; =&amp;gt; &#039;val&#039;]&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
		$user = new User(self::$driver, $attributes);&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;persist();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update - This is the way to update an existing entity. Entities attributes can be accessed as normal class properties using magic methods.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
&lt;br /&gt;
		$user = $model-&amp;gt;find(100);&lt;br /&gt;
		$user-&amp;gt;resetCount = 10;&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;update();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Delete - This is a way to delete a row from the table using it&#039;s primary key.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
&lt;br /&gt;
		$user = $model-&amp;gt;find(100);&lt;br /&gt;
		$user-&amp;gt;resetCount = 10;&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;update();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Get - The get method returns all the models that are in the table, respectively, all the filters that have been applied to the entity so far. Please check the list of filter methods at the end of this section for more details.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Finds all the Models with eager relations loaded&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array  $columns columns to be selected in query&lt;br /&gt;
	 * @return Collection&lt;br /&gt;
	 */&lt;br /&gt;
	public function get($columns = [&#039;*&#039;])&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Count - The count method counts the all the rows from the table, respectively all the rows that satisfy filters that have been applied to the entity so far.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
		$count = $model-&amp;gt;count();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Filtering ====&lt;br /&gt;
&lt;br /&gt;
* select - selects only the specified columns in the next query.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 /* @method select()     select(array $columns) */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* where -&amp;gt; adds a where clause in the next query that will be executed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 /* @method where()      where($conditions, string $glue = &#039;AND&#039;) */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* orders -&amp;gt; adds an ORDER BY clause to the next query.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 /* @method order()      order($columns) */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* filter - applies a custom filter on a relation. This is the Entities way of making joins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 /* @method filter()     filter(string $relation, Closure $callback) */&lt;br /&gt;
&lt;br /&gt;
    // The following query only counts users which sent a message with subject &amp;quot;sentMessages&amp;quot;.&lt;br /&gt;
    $model = new User(self::$driver);&lt;br /&gt;
    $model-&amp;gt;filter(&#039;sentMessages&#039;,&lt;br /&gt;
	function ($query)&lt;br /&gt;
	{&lt;br /&gt;
		$query-&amp;gt;where(&amp;quot;subject = &#039;message1&#039;&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
    );&lt;br /&gt;
    $count = $model-&amp;gt;count();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Google Summer of Code 2018{{#translation:}}]]&lt;br /&gt;
[[Category:Development{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla!_4.x{{#translation:}}]]&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502697</id>
		<title>J4.x:Joomla Entities</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502697"/>
		<updated>2018-08-12T17:12:23Z</updated>

		<summary type="html">&lt;p&gt;Isac: /* Using the Entity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|text-color=#333|title=&lt;br /&gt;
GSoC 2018 &amp;lt;br /&amp;gt;&lt;br /&gt;
Joomla Entities&amp;lt;br /&amp;gt;Documentation}}&lt;br /&gt;
[[Image:Gsoc2016.png|75px|center|link=GSOC 2018]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=4.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
The scope of this year project is to build and integrate a new Model system into Joomla 4, that will solve some of the current issues from the Webservices project, as well as improve the limits of the current system. The integration will be fully implemented by the release of Joomla 4.0 in the com_content component. The purpose for this documentation is to outline how to use the underlaying Entities project, which can be then used by developers to write new extensions and convert existing ones.&lt;br /&gt;
&lt;br /&gt;
Entities! The entities project is the base project. Without it we would not be able to accomplish the tasks in the Webservices project. Starting as a new project, I have managed to get a basic implementation going of an Active Record pattern based layer that shall be used as a dependency in Joomla CMS, to implement each table as a DAO. &lt;br /&gt;
&lt;br /&gt;
The need for this project comes from the limitations of the current Model architecture which have been reached during the last year GSoC Webservices [https://joomla-projects.github.io/gsoc18_webservices/?specification/introduction.md project].&lt;br /&gt;
&lt;br /&gt;
Because by reaching these limitations, it was clear that the Model layer had to be redone. Taking it a step further, with the desire to make development in Joomla easier, the Entities [https://github.com/joomla-projects/entities project] was born. The main highlights of this approach is that we can now have relations in our models, feature that has been long missed in Joomla models. Up to now, the One to One and One To Many relations have been implemented.&lt;br /&gt;
&lt;br /&gt;
The project fits perfectly in the Joomla ecosystem, as it is using the joomla-framework/database DatabaseDriver for the connection to various database systems. We have decided that the next step would be actually integrating the Entities project in Joomla CMS, in the lib_api branch of the last year webservices project. Taking a step back from implementing features in a separate project, and actually connecting the dots with the CMS implementation will give us important insights about the features that will be needed in the future.&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
The entities project can be easily integrated into any php project by adding the following dependency to your composer file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;config&amp;quot;: {&lt;br /&gt;
    &amp;quot;preferred-install&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/event&amp;quot;: &amp;quot;dist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;require&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/entities&amp;quot;: &amp;quot;dev-master&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
&lt;br /&gt;
=== Defining Entities === &lt;br /&gt;
&lt;br /&gt;
* Table - The table name should have &#039;#__&#039; as a prefix. The Entity also sets a default table name in case none is specified by the developer. The default value is the pluralised and underscore separated Class name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The table associated with the model.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected $table = &#039;#__content&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamps - specify is the current entity uses timestamps or not. If it does, special column aliases need to be specified for the &#039;createdAt&#039; and &#039;updatedAt&#039; columns. These two columns are handled automatically by the project when creating or updating the entity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicates if the model should be timestamped.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var boolean&lt;br /&gt;
	 */&lt;br /&gt;
	public $timestamps = false;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Column Aliases - having the same functionality as in the current Joomla implementation, they provide a way to be able to refer at different column names across different components with one name in case they fulfil the same functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Array with alias for &amp;quot;special&amp;quot; columns such as ordering, hits etc etc&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $columnAlias = [&lt;br /&gt;
		&#039;createdAt&#039; =&amp;gt; &#039;created&#039;,&lt;br /&gt;
		&#039;updatedAt&#039; =&amp;gt; &#039;modified&#039;,&lt;br /&gt;
		&#039;published&#039; =&amp;gt; &#039;state&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Casts - Used to cast database raw strings into usable types in PHP. Two most common use cases are &#039;int&#039; and &#039;array&#039;. The latter is specifically useful as it transforms json columns into key indexed arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be cast to native types.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $casts = [&lt;br /&gt;
		&#039;params&#039; =&amp;gt; &#039;array&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dates - used to cast dates to Carbon instances&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be mutated to dates. Already aliased!&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $dates = [&lt;br /&gt;
		&#039;registerDate&#039;,&lt;br /&gt;
		&#039;lastvisitDate&#039;,&lt;br /&gt;
		&#039;lastResetTime&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Hidden - used to hide certain columns from serialisation. E.g. passwords.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be hidden for serialization.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $hidden = [&lt;br /&gt;
		&#039;password&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* With - eager load relations into the entity. If not specified, the relations are lazy loaded. The primary key and foreign key are mandatory if the relation is loaded with constraints(selecting only some of the columns for efficiency purposes)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The relations to eager load on every query.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 * @todo add to docs: &lt;br /&gt;
	 */&lt;br /&gt;
	protected $with = array(&lt;br /&gt;
		&#039;sentMessages:message_id,subject,user_id_from&#039;&lt;br /&gt;
	);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Defining Entities Relations === &lt;br /&gt;
&lt;br /&gt;
* HasOne - One to One relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-one relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasOne&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasOne($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the profile for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function profile()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasOne(&#039;Joomla\Entity\Tests\Models\UserProfile&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* HasMany - One to Many relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasMany&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasMany($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the sent messages for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function sentMessages()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasMany(&#039;Joomla\Entity\Tests\Models\Message&#039;, &#039;user_id_from&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* BelongsTo - Reverse relation for One to One or One to Many.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define an inverse one-to-one or many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $relation   relation name, must be the same as the caller function&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $ownerKey   the associated key on the parent model.&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\BelongsTo&lt;br /&gt;
	 */&lt;br /&gt;
	public function belongsTo($related, $relation, $foreignKey = null, $ownerKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the author for the current article.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function author()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;belongsTo(&#039;Joomla\CMS\Entity\User&#039;, &#039;author&#039;, &#039;created_by&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Queries Using The Entity === &lt;br /&gt;
The following default functionalities are available for the entities:&lt;br /&gt;
&lt;br /&gt;
* Find - finds an entity or a Collection of entities by their primary keys. In addition, the columns that are desired to be loaded can be specified. By default, we load all the columns.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Find a model by its primary key.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   mixed  $id      primary key&lt;br /&gt;
	 * @param   array  $columns columns to be selected in query&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return Model|boolean&lt;br /&gt;
	 */&lt;br /&gt;
	public function find($id, $columns = [&#039;*&#039;])&lt;br /&gt;
	&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Insert - This is the way to insert a new row in a table. First we create a new entity using the desired attribute, next we persist it to the database.&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$attributes = [&lt;br /&gt;
			&#039;email&#039; =&amp;gt; &amp;quot;test@test.com&amp;quot;,&lt;br /&gt;
			&#039;params&#039; =&amp;gt; [&#039;test&#039; =&amp;gt; &#039;val&#039;]&lt;br /&gt;
			];&lt;br /&gt;
&lt;br /&gt;
		$user = new User(self::$driver, $attributes);&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;persist();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Update - This is the way to update an existing entity. Entities attributes can be accessed as normal class properties using magic methods.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
&lt;br /&gt;
		$user = $model-&amp;gt;find(100);&lt;br /&gt;
		$user-&amp;gt;resetCount = 10;&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;update();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Delete - This is a way to delete a row from the table using it&#039;s primary key.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
&lt;br /&gt;
		$user = $model-&amp;gt;find(100);&lt;br /&gt;
		$user-&amp;gt;resetCount = 10;&lt;br /&gt;
&lt;br /&gt;
		$user-&amp;gt;update();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Get - The get method returns all the models that are in the table, respectively, all the filters that have been applied to the entity so far. Please check the list of filter methods at the end of this section for more details.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Finds all the Models with eager relations loaded&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   array  $columns columns to be selected in query&lt;br /&gt;
	 * @return Collection&lt;br /&gt;
	 */&lt;br /&gt;
	public function get($columns = [&#039;*&#039;])&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Count - The count method counts the all the rows from the table, respectively all the rows that satisfy filters that have been applied to the entity so far.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
		$model = new User(self::$driver);&lt;br /&gt;
		$count = $model-&amp;gt;count();&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Filtering ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Google Summer of Code 2018{{#translation:}}]]&lt;br /&gt;
[[Category:Development{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla!_4.x{{#translation:}}]]&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502344</id>
		<title>J4.x:Joomla Entities</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502344"/>
		<updated>2018-08-12T14:06:59Z</updated>

		<summary type="html">&lt;p&gt;Isac: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|text-color=#333|title=&lt;br /&gt;
GSoC 2018 &amp;lt;br /&amp;gt;&lt;br /&gt;
Joomla Entities&amp;lt;br /&amp;gt;Documentation}}&lt;br /&gt;
[[Image:Gsoc2016.png|75px|center|link=GSOC 2018]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=4.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
The scope of this year project is to build and integrate a new Model system into Joomla 4, that will solve some of the current issues from the Webservices project, as well as improve the limits of the current system. The integration will be fully implemented by the release of Joomla 4.0 in the com_content component. The purpose for this documentation is to outline how to use the underlaying Entities project, which can be then used by developers to write new extensions and convert existing ones.&lt;br /&gt;
&lt;br /&gt;
Entities! The entities project is the base project. Without it we would not be able to accomplish the tasks in the Webservices project. Starting as a new project, I have managed to get a basic implementation going of an Active Record pattern based layer that shall be used as a dependency in Joomla CMS, to implement each table as a DAO. &lt;br /&gt;
&lt;br /&gt;
The need for this project comes from the limitations of the current Model architecture which have been reached during the last year GSoC Webservices [https://joomla-projects.github.io/gsoc18_webservices/?specification/introduction.md project].&lt;br /&gt;
&lt;br /&gt;
Because by reaching these limitations, it was clear that the Model layer had to be redone. Taking it a step further, with the desire to make development in Joomla easier, the Entities [https://github.com/joomla-projects/entities project] was born. The main highlights of this approach is that we can now have relations in our models, feature that has been long missed in Joomla models. Up to now, the One to One and One To Many relations have been implemented.&lt;br /&gt;
&lt;br /&gt;
The project fits perfectly in the Joomla ecosystem, as it is using the joomla-framework/database DatabaseDriver for the connection to various database systems. We have decided that the next step would be actually integrating the Entities project in Joomla CMS, in the lib_api branch of the last year webservices project. Taking a step back from implementing features in a separate project, and actually connecting the dots with the CMS implementation will give us important insights about the features that will be needed in the future.&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
The entities project can be easily integrated into any php project by adding the following dependency to your composer file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;config&amp;quot;: {&lt;br /&gt;
    &amp;quot;preferred-install&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/event&amp;quot;: &amp;quot;dist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;require&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/entities&amp;quot;: &amp;quot;dev-master&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
&lt;br /&gt;
=== Defining Entities === &lt;br /&gt;
&lt;br /&gt;
* Table - The table name should have &#039;#__&#039; as a prefix. The Entity also sets a default table name in case none is specified by the developer. The default value is the pluralised and underscore separated Class name.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The table associated with the model.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected $table = &#039;#__content&#039;;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Timestamps - specify is the current entity uses timestamps or not. If it does, special column aliases need to be specified for the &#039;createdAt&#039; and &#039;updatedAt&#039; columns. These two columns are handled automatically by the project when creating or updating the entity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Indicates if the model should be timestamped.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var boolean&lt;br /&gt;
	 */&lt;br /&gt;
	public $timestamps = false;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Column Aliases - having the same functionality as in the current Joomla implementation, they provide a way to be able to refer at different column names across different components with one name in case they fulfil the same functionality.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Array with alias for &amp;quot;special&amp;quot; columns such as ordering, hits etc etc&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var    array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $columnAlias = [&lt;br /&gt;
		&#039;createdAt&#039; =&amp;gt; &#039;created&#039;,&lt;br /&gt;
		&#039;updatedAt&#039; =&amp;gt; &#039;modified&#039;,&lt;br /&gt;
		&#039;published&#039; =&amp;gt; &#039;state&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Casts - Used to cast database raw strings into usable types in PHP. Two most common use cases are &#039;int&#039; and &#039;array&#039;. The latter is specifically useful as it transforms json columns into key indexed arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be cast to native types.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $casts = [&lt;br /&gt;
		&#039;params&#039; =&amp;gt; &#039;array&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dates - used to cast dates to Carbon instances&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be mutated to dates. Already aliased!&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $dates = [&lt;br /&gt;
		&#039;registerDate&#039;,&lt;br /&gt;
		&#039;lastvisitDate&#039;,&lt;br /&gt;
		&#039;lastResetTime&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Hidden - used to hide certain columns from serialisation. E.g. passwords.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The attributes that should be hidden for serialization.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 */&lt;br /&gt;
	protected $hidden = [&lt;br /&gt;
		&#039;password&#039;&lt;br /&gt;
	];&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* With - eager load relations into the entity. If not specified, the relations are lazy loaded. The primary key and foreign key are mandatory if the relation is loaded with constraints(selecting only some of the columns for efficiency purposes)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * The relations to eager load on every query.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @var array&lt;br /&gt;
	 * @todo add to docs: &lt;br /&gt;
	 */&lt;br /&gt;
	protected $with = array(&lt;br /&gt;
		&#039;sentMessages:message_id,subject,user_id_from&#039;&lt;br /&gt;
	);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Defining Entities Relations === &lt;br /&gt;
&lt;br /&gt;
* HasOne - One to One relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-one relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasOne&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasOne($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the profile for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function profile()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasOne(&#039;Joomla\Entity\Tests\Models\UserProfile&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* HasMany - One to Many relation.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define a one-to-many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $localKey   local primary key name&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\HasMany&lt;br /&gt;
	 */&lt;br /&gt;
	public function hasMany($related, $foreignKey = null, $localKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the sent messages for the current user.&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function sentMessages()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;hasMany(&#039;Joomla\Entity\Tests\Models\Message&#039;, &#039;user_id_from&#039;);&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* BelongsTo - Reverse relation for One to One or One to Many.&lt;br /&gt;
&lt;br /&gt;
Signature:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Define an inverse one-to-one or many relation.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param   string  $related    related Model&lt;br /&gt;
	 * @param   string  $relation   relation name, must be the same as the caller function&lt;br /&gt;
	 * @param   string  $foreignKey foreign key name in current mode&lt;br /&gt;
	 * @param   string  $ownerKey   the associated key on the parent model.&lt;br /&gt;
	 * @return \Joomla\Entity\Relations\BelongsTo&lt;br /&gt;
	 */&lt;br /&gt;
	public function belongsTo($related, $relation, $foreignKey = null, $ownerKey = null)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Get the author for the current article.&lt;br /&gt;
	 *&lt;br /&gt;
	 * @return Relation&lt;br /&gt;
	 */&lt;br /&gt;
	public function author()&lt;br /&gt;
	{&lt;br /&gt;
		return $this-&amp;gt;belongsTo(&#039;Joomla\CMS\Entity\User&#039;, &#039;author&#039;, &#039;created_by&#039;);&lt;br /&gt;
	}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Using the Entity === &lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Google Summer of Code 2018{{#translation:}}]]&lt;br /&gt;
[[Category:Development{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla!_4.x{{#translation:}}]]&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502343</id>
		<title>J4.x:Joomla Entities</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502343"/>
		<updated>2018-08-12T13:03:08Z</updated>

		<summary type="html">&lt;p&gt;Isac: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|text-color=#333|title=&lt;br /&gt;
GSoC 2018 &amp;lt;br /&amp;gt;&lt;br /&gt;
Joomla Entities&amp;lt;br /&amp;gt;Documentation}}&lt;br /&gt;
[[Image:Gsoc2016.png|75px|center|link=GSOC 2018]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=4.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
The scope of this year project is to build and integrate a new Model system into Joomla 4, that will solve some of the current issues from the Webservices project, as well as improve the limits of the current system. The integration will be fully implemented by the release of Joomla 4.0 in the com_content component. The purpose for this documentation is to outline how to use the underlaying Entities project, which can be then used by developers to write new extensions and convert existing ones.&lt;br /&gt;
&lt;br /&gt;
Entities! The entities project is the base project. Without it we would not be able to accomplish the tasks in the Webservices project. Starting as a new project, I have managed to get a basic implementation going of an Active Record pattern based layer that shall be used as a dependency in Joomla CMS, to implement each table as a DAO. &lt;br /&gt;
&lt;br /&gt;
The need for this project comes from the limitations of the current Model architecture which have been reached during the last year GSoC Webservices [https://joomla-projects.github.io/gsoc18_webservices/?specification/introduction.md project].&lt;br /&gt;
&lt;br /&gt;
Because by reaching these limitations, it was clear that the Model layer had to be redone. Taking it a step further, with the desire to make development in Joomla easier, the Entities [https://github.com/joomla-projects/entities project] was born. The main highlights of this approach is that we can now have relations in our models, feature that has been long missed in Joomla models. Up to now, the One to One and One To Many relations have been implemented.&lt;br /&gt;
&lt;br /&gt;
The project fits perfectly in the Joomla ecosystem, as it is using the joomla-framework/database DatabaseDriver for the connection to various database systems. We have decided that the next step would be actually integrating the Entities project in Joomla CMS, in the lib_api branch of the last year webservices project. Taking a step back from implementing features in a separate project, and actually connecting the dots with the CMS implementation will give us important insights about the features that will be needed in the future.&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
The entities project can be easily integrated into any php project by adding the following dependency to your composer file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;config&amp;quot;: {&lt;br /&gt;
    &amp;quot;preferred-install&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/event&amp;quot;: &amp;quot;dist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;require&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/entities&amp;quot;: &amp;quot;dev-master&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Google Summer of Code 2018{{#translation:}}]]&lt;br /&gt;
[[Category:Development{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla!_4.x{{#translation:}}]]&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502342</id>
		<title>J4.x:Joomla Entities</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=J4.x:Joomla_Entities&amp;diff=502342"/>
		<updated>2018-08-12T13:00:25Z</updated>

		<summary type="html">&lt;p&gt;Isac: Joomla Entities Documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Top portal heading|color=white-bkgd|text-color=#333|title=&lt;br /&gt;
GSoC 2018 &amp;lt;br /&amp;gt;&lt;br /&gt;
Joomla Entities&amp;lt;br /&amp;gt;Documentation}}&lt;br /&gt;
[[Image:Gsoc2016.png|75px|center|link=GSOC 2018]]&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{Joomla version|version=4.x}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{-}}&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
The scope of this year project is to build and integrate a new Model system into Joomla 4, that will solve some of the current issues from the Webservices project, as well as improve the limits of the current system. The integration will be fully implemented by the release of Joomla 4.0 in the com_content component. The purpose for this documentation is to outline how to use the underlaying Entities project, which can be then used by developers to write new extensions and convert existing ones.&lt;br /&gt;
&lt;br /&gt;
Entities! The entities project is the base project. Without it we would not be able to accomplish the tasks in the Webservices project. Starting as a new project, I have managed to get a basic implementation going of an Active Record pattern based layer that shall be used as a dependency in Joomla CMS, to implement each table as a DAO. &lt;br /&gt;
&lt;br /&gt;
The need for this project comes from the limitations of the current Model architecture which have been reached during the last year GSoC Webservices [https://joomla-projects.github.io/gsoc18_webservices/?specification/introduction.md project].&lt;br /&gt;
&lt;br /&gt;
Because by reaching these limitations, it was clear that the Model layer had to be redone. Taking it a step further, with the desire to make development in Joomla easier, the Entities [https://github.com/joomla-projects/entities project] was born. The main highlights of this approach is that we can now have relations in our models, feature that has been long missed in Joomla models. Up to now, the One to One and One To Many relations have been implemented.&lt;br /&gt;
&lt;br /&gt;
The project fits perfectly in the Joomla ecosystem, as it is using the joomla-framework/database DatabaseDriver for the connection to various database systems. We have decided that the next step would be actually integrating the Entities project in Joomla CMS, in the lib_api branch of the last year webservices project. Taking a step back from implementing features in a separate project, and actually connecting the dots with the CMS implementation will give us important insights about the features that will be needed in the future.&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
The entities project can be easily integrated into any php project by adding the following dependency to your composer file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;config&amp;quot;: {&lt;br /&gt;
    &amp;quot;preferred-install&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/event&amp;quot;: &amp;quot;dist&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;require&amp;quot;: {&lt;br /&gt;
        &amp;quot;joomla/entities&amp;quot;: &amp;quot;dev-master&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Google Summer of Code 2018{{#translation:}}]]&lt;br /&gt;
[[Category:Development{{#translation:}}]]&lt;br /&gt;
[[Category:Joomla!_4.x{{#translation:}}]]&lt;br /&gt;
[[Category:Tutorials{{#translation:}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Isac&amp;diff=502181</id>
		<title>User:Isac</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Isac&amp;diff=502181"/>
		<updated>2018-08-10T12:58:17Z</updated>

		<summary type="html">&lt;p&gt;Isac: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is my page for GSOC 2017 &amp;amp; 2018.&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Overall_diagram.png&amp;diff=443358</id>
		<title>File:Overall diagram.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Overall_diagram.png&amp;diff=443358"/>
		<updated>2017-08-24T18:43:12Z</updated>

		<summary type="html">&lt;p&gt;Isac: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Parallel Testing Project Overall Diagram&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=User:Isac&amp;diff=443357</id>
		<title>User:Isac</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=User:Isac&amp;diff=443357"/>
		<updated>2017-08-24T14:38:20Z</updated>

		<summary type="html">&lt;p&gt;Isac: Created page with &amp;quot;This is my page for GSOC 2017.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is my page for GSOC 2017.&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=File:Codeception_Logs.png&amp;diff=443311</id>
		<title>File:Codeception Logs.png</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=File:Codeception_Logs.png&amp;diff=443311"/>
		<updated>2017-08-24T08:17:48Z</updated>

		<summary type="html">&lt;p&gt;Isac: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Codeception Logs Format&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
	<entry>
		<id>https://docs.sandbox.joomla.org/index.php?title=JDOC:Documentation_Translators&amp;diff=391573</id>
		<title>JDOC:Documentation Translators</title>
		<link rel="alternate" type="text/html" href="https://docs.sandbox.joomla.org/index.php?title=JDOC:Documentation_Translators&amp;diff=391573"/>
		<updated>2017-04-06T13:29:42Z</updated>

		<summary type="html">&lt;p&gt;Isac: /* ro - Română - Romanian */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:JDOC translation icon.png|right]]&lt;br /&gt;
Here, people &#039;&#039;&#039;translating&#039;&#039;&#039; {{SITENAME}} can sign up as a translator. Please be sure to read the required reading list below. &lt;br /&gt;
&lt;br /&gt;
After you add your username to the list below under the appropriate language heading, a [[JDOC:Translation Administrators|Translation Administrator]] will assign your username translator permissions. After your username is added as a translator you can start translating! Please be on the look out for a [[Template:Translator welcome|welcome messaFvertaage]] with more information posted to your user talk page.{{-}}&lt;br /&gt;
&lt;br /&gt;
== Required Reading ==&lt;br /&gt;
* Getting started, read [[JDOC:Page Translation Quickstart Guide|Page Translation Quickstart Guide]]&lt;br /&gt;
* Detailed explanation of translating, [[JDOC:Page Translation Explained|Page Translation Explained]].&lt;br /&gt;
* Our [[JDOC:Language policy|Language policy]]&lt;br /&gt;
* [[JDOC:Translator Tips|Translator Tips]]&lt;br /&gt;
* [[Joomla:JDOC%27s_Translation_Guidelines|Translation Guidelines]]&lt;br /&gt;
* Having an [[JDOC:Translation Questions|issue or need help]]?&lt;br /&gt;
&lt;br /&gt;
{{tip|text=Dear translators! Please [[Special:TranslatorSignup|register for translator notifications about your language]]. You are placed on a list to receive notices about new/updated pages that need translation.|title=A Tip for Translators}}&lt;br /&gt;
&lt;br /&gt;
===Add Your Language===&lt;br /&gt;
If your language isn&#039;t listed below, please add it using the format:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;lang code&amp;gt; -  Localised language name - English language name &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use the syntax, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;* {{User|YourUsername}}&amp;lt;/nowiki&amp;gt; - requested&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When a Translation Administrator adds you as a translator, they will remove the &amp;quot;- requested&amp;quot; from your username.&lt;br /&gt;
&lt;br /&gt;
==Current Translations Teams==&lt;br /&gt;
&lt;br /&gt;
Documentation language codes are different from Joomla! language codes, they are ISO 639-1 2 letter code. A small quantity of 4 letter language codes are used as an exception, but these language codes are all lowercase.&lt;br /&gt;
&lt;br /&gt;
=== ar - عربي - arabe ===&lt;br /&gt;
* {{User|ghilo}}&lt;br /&gt;
* {{User|HawraMilani}}&lt;br /&gt;
* {{User|hossen}}&lt;br /&gt;
&lt;br /&gt;
=== af - Afrikaans ===&lt;br /&gt;
*{{User|JoeSA}}&lt;br /&gt;
&lt;br /&gt;
=== bg - Български - Bulgarian ===&lt;br /&gt;
* {{User|bdimov}}&lt;br /&gt;
* {{User|Mastwd}}&lt;br /&gt;
&lt;br /&gt;
=== ca - Català - Catalan === &lt;br /&gt;
* {{User|el_libre}}&lt;br /&gt;
&lt;br /&gt;
=== cs - Čeština - Czech ===&lt;br /&gt;
* {{User|fredericco-cz}}&lt;br /&gt;
&lt;br /&gt;
=== da - Dansk - Danish ===&lt;br /&gt;
* {{User|ot2sen}}&lt;br /&gt;
* {{User|rbuelund}}&lt;br /&gt;
&lt;br /&gt;
=== de - Deutsch - German ===&lt;br /&gt;
* {{User|Astridx}}&lt;br /&gt;
* {{User|Assmann}}&lt;br /&gt;
* {{User|Balzercomp}}&lt;br /&gt;
* {{User|ceus1984}}&lt;br /&gt;
* {{User|Chmst}}&lt;br /&gt;
* {{User|chrishoefliger}}&lt;br /&gt;
* {{User|FrankyD}}&lt;br /&gt;
* {{User|fruppel}}&lt;br /&gt;
* {{User|gorgonz}}&lt;br /&gt;
* {{User|jehacgn}}&lt;br /&gt;
* {{User|joomla-agency}}&lt;br /&gt;
* {{User|Ka3media}}&lt;br /&gt;
* {{User|King_Louis_1}}&lt;br /&gt;
* {{User|Kolvar}}&lt;br /&gt;
* {{User|Kurztipp}}&lt;br /&gt;
* {{User|m-b-o}}&lt;br /&gt;
* {{User|michaelmyk}}&lt;br /&gt;
* {{User|Paterna}}&lt;br /&gt;
* {{User|Pete71}}&lt;br /&gt;
* {{User|phillopp}}&lt;br /&gt;
* {{User|plocher}}&lt;br /&gt;
* {{User|Prof.Logout}}&lt;br /&gt;
* {{User|SeigetsuShoen}}&lt;br /&gt;
* {{User|Sisko1990}}&lt;br /&gt;
* {{User|Stefanie}}&lt;br /&gt;
* {{User|Tkahl}}&lt;br /&gt;
* {{User|UCFnet002}}&lt;br /&gt;
* {{User|Usimon}}&lt;br /&gt;
* {{User|Webberry}}&lt;br /&gt;
* {{User|Yvesh}}&lt;br /&gt;
* {{User|zero24}}&lt;br /&gt;
&lt;br /&gt;
=== el - Ελληνικά - Greek ===&lt;br /&gt;
* {{User|pnkr}}&lt;br /&gt;
&lt;br /&gt;
=== es - Español - Spanish ===&lt;br /&gt;
* {{User|Abulafia}}&lt;br /&gt;
* {{User|BNovoa.S}}&lt;br /&gt;
* {{User|carcam}}&lt;br /&gt;
* {{User|cristobal.vio}}&lt;br /&gt;
* {{User|Crsanchez}}&lt;br /&gt;
* {{User|danielperaza}}&lt;br /&gt;
* {{User|framon}}&lt;br /&gt;
* {{User|Irene.lopez}}&lt;br /&gt;
* {{User|isidrobaq}}&lt;br /&gt;
* {{User|ivanramosnet}}&lt;br /&gt;
* {{User|Javiparati}}&lt;br /&gt;
* {{User|Jcollver}}&lt;br /&gt;
* {{User|Leo_Soto}}&lt;br /&gt;
* {{User|netandsoftware}}&lt;br /&gt;
* {{User|NunoLopes}}&lt;br /&gt;
* {{User|pfvidal}}&lt;br /&gt;
* {{User|shaz}}&lt;br /&gt;
* {{User|Urielmx}}&lt;br /&gt;
* {{User|VictorYork87}}&lt;br /&gt;
* {{User|viena}}&lt;br /&gt;
* {{User|Willin}}&lt;br /&gt;
&lt;br /&gt;
=== et - Eesti - Estonian ===&lt;br /&gt;
* {{User|Eraser}}&lt;br /&gt;
&lt;br /&gt;
=== fa - فارسی - Persian ===&lt;br /&gt;
* {{User|Grand}}&lt;br /&gt;
* {{User|Heydari}}&lt;br /&gt;
* {{User|Levelup}}&lt;br /&gt;
* {{User|mhehm}}&lt;br /&gt;
&lt;br /&gt;
=== fr - Français - French ===&lt;br /&gt;
* {{User|edelouche}}&lt;br /&gt;
* {{User|MATsxm}}&lt;br /&gt;
* {{User|Opware2000}}&lt;br /&gt;
* {{User|Perete}}&lt;br /&gt;
* {{User|Sandra97}}&lt;br /&gt;
* {{User|david613}}&lt;br /&gt;
&lt;br /&gt;
=== ga - Gaeilge - Irish ===&lt;br /&gt;
* {{User|rvbgnu}}&lt;br /&gt;
&lt;br /&gt;
=== he - עברית - Hebrew ===&lt;br /&gt;
* {{User|ydl}}&lt;br /&gt;
* {{User|shirdesign}}&lt;br /&gt;
&lt;br /&gt;
=== hi - हिंदी - Hindi ===&lt;br /&gt;
* {{User|Rana}}&lt;br /&gt;
* {{User|Syhussaini}}&lt;br /&gt;
* {{User|Shivamrajput}}&lt;br /&gt;
&lt;br /&gt;
=== hu - Magyar - Hungarian ===&lt;br /&gt;
* {{User|Balazs}}&lt;br /&gt;
* {{User|webgobe}}&lt;br /&gt;
&lt;br /&gt;
=== hy - Հայերեն - Armenian ===&lt;br /&gt;
* {{User|Aaleksanyants}}&lt;br /&gt;
&lt;br /&gt;
=== id - Bahasa Indonesia - Indonesian ===&lt;br /&gt;
* {{User|dw1Rianto}}&lt;br /&gt;
* {{User|Micokelana}}&lt;br /&gt;
* {{User|sikumbang}}&lt;br /&gt;
&lt;br /&gt;
=== it - Italiano - Italian ===&lt;br /&gt;
* {{User|alexred}}&lt;br /&gt;
* {{User|alikon}}&lt;br /&gt;
* {{User|CinziaDesign}}&lt;br /&gt;
* {{User|donato}}&lt;br /&gt;
* {{User|Luca.marzo}}&lt;br /&gt;
* {{User|marioluciani}}&lt;br /&gt;
* {{User|nemo_bis}} (occasionally)&lt;br /&gt;
* {{User|Paolo Alberti}}&lt;br /&gt;
* {{User|robertolongo}}&lt;br /&gt;
* {{User|ste}}&lt;br /&gt;
&lt;br /&gt;
=== ja - 日本語 - Japanese ===&lt;br /&gt;
* {{User|Koji Hijikuro}}&lt;br /&gt;
* {{User|Nori}}&lt;br /&gt;
* {{User|Richell}}&lt;br /&gt;
* {{User|Yama}}&lt;br /&gt;
&lt;br /&gt;
=== nl - Nederlands - Dutch ===&lt;br /&gt;
* {{User|AboutTime}}&lt;br /&gt;
* {{User|Alex0703}}&lt;br /&gt;
* {{User|Annemiek}}&lt;br /&gt;
* {{User|Arkomat}}&lt;br /&gt;
* {{User|bcdesign}}&lt;br /&gt;
* {{User|crommie}}&lt;br /&gt;
* {{User|Grubosoft}}&lt;br /&gt;
* {{User|fcschippers}}&lt;br /&gt;
* {{User|HermanPeeren}}&lt;br /&gt;
* {{User|Hvdmeer}}&lt;br /&gt;
* {{User|janvankuijk}}&lt;br /&gt;
* {{User|John Flour}}&lt;br /&gt;
* {{User|JorSanders}}&lt;br /&gt;
* {{User|Josien}}&lt;br /&gt;
* {{User|Lara}}&lt;br /&gt;
* {{User|Lianne}}&lt;br /&gt;
* {{User|klatte88}}&lt;br /&gt;
* {{User|ManuAmpe}}&lt;br /&gt;
* {{User|Marcelk}}&lt;br /&gt;
* {{User|marionnijhuis}}&lt;br /&gt;
* {{User|Marnix}}&lt;br /&gt;
* {{User|MartijnM}}&lt;br /&gt;
* {{User|Meta}}&lt;br /&gt;
* {{User|metdick}}&lt;br /&gt;
* {{User|Mtb}}&lt;br /&gt;
* {{User|n9iels}}&lt;br /&gt;
* {{User|Nemphias}}&lt;br /&gt;
* {{User|Nico-van-Leeuwen}}&lt;br /&gt;
* {{User|Onderzoekspraktijk}}&lt;br /&gt;
* {{User|rachel73}}&lt;br /&gt;
* {{User|Renem}}&lt;br /&gt;
* {{User|Ries}}&lt;br /&gt;
* {{User|Rineke}}&lt;br /&gt;
* {{User|Schrijvers123}}&lt;br /&gt;
* {{User|slibbe}}&lt;br /&gt;
* {{User|Stitch123}}&lt;br /&gt;
* {{User|Vertaalbirdy}}&lt;br /&gt;
* {{User|webmiep}}&lt;br /&gt;
* {{User|webcatsolutions}}&lt;br /&gt;
* {{User|willoweb}}&lt;br /&gt;
* {{User|wimstrik}}&lt;br /&gt;
&lt;br /&gt;
=== pl - Polski - Polish ===&lt;br /&gt;
* {{User|Derek}}&lt;br /&gt;
* {{User|justyna}}&lt;br /&gt;
* {{User|MiloW}}&lt;br /&gt;
&lt;br /&gt;
=== pt - Português - Portuguese ===&lt;br /&gt;
* {{User|Djesus}}&lt;br /&gt;
* {{User|Horus_68}}&lt;br /&gt;
* {{User|Mansil}}&lt;br /&gt;
* {{User|Nunof}}&lt;br /&gt;
* {{User|NunoLopes}}&lt;br /&gt;
* {{User|Ricardo.fusco}}&lt;br /&gt;
&lt;br /&gt;
=== pt-br - Português Brasil - Brazilian Portuguese ===&lt;br /&gt;
* {{User|Airton}}&lt;br /&gt;
* {{User|alangustavo}}&lt;br /&gt;
* {{User|AleMorettiSan}}&lt;br /&gt;
* {{User|Anabarcellos}}&lt;br /&gt;
* {{User|Ariadnepinheiro}}&lt;br /&gt;
* {{User|Belisards}}&lt;br /&gt;
* {{User|Dagoberto}}&lt;br /&gt;
* {{User|DiLeu}}&lt;br /&gt;
* {{User|Filipetorres}}&lt;br /&gt;
* {{User|Gleisonsoares}}&lt;br /&gt;
* {{User|Helvecio}}&lt;br /&gt;
* {{User|Henrydouglas}}&lt;br /&gt;
* {{User|Jeann Wilson}}&lt;br /&gt;
* {{User|Murilotimo}}&lt;br /&gt;
* {{User|VitorAdonai}}&lt;br /&gt;
* {{User|Vizetti}}&lt;br /&gt;
* {{User|Welkson Ramos}}&lt;br /&gt;
&lt;br /&gt;
=== ro - Română - Romanian ===&lt;br /&gt;
* {{User|andreeastefan}}&lt;br /&gt;
* {{User|isac}}&lt;br /&gt;
&lt;br /&gt;
=== ru - Русский - Russian ===&lt;br /&gt;
* {{User|AlexSmirnov}}&lt;br /&gt;
* {{User|Antonio3}}&lt;br /&gt;
* {{User|b2z}}&lt;br /&gt;
* {{User|Dosfanat}}&lt;br /&gt;
* {{User|Igor}}&lt;br /&gt;
* {{User|Kanta}}&lt;br /&gt;
* {{User|Leo240}}&lt;br /&gt;
* {{User|Nikitm}}&lt;br /&gt;
* {{User|Serg SSN}}&lt;br /&gt;
* {{User|Vyatka}}&lt;br /&gt;
* {{User|Yambergaa}}&lt;br /&gt;
&lt;br /&gt;
=== si - සිංහල - Sinhala ===&lt;br /&gt;
* {{User|Yasirunilan}}&lt;br /&gt;
* {{User|Supun}}&lt;br /&gt;
&lt;br /&gt;
=== sk - Slovenčina - Slovak ===&lt;br /&gt;
* {{User|adambako}}&lt;br /&gt;
&lt;br /&gt;
=== sv - Svenska - Swedish ===&lt;br /&gt;
* {{User|Propellerhuvud}}&lt;br /&gt;
* {{User|Sgagner}}&lt;br /&gt;
&lt;br /&gt;
=== sw - Kiswahili - Swahili ===&lt;br /&gt;
* {{User|Ayeko}}&lt;br /&gt;
&lt;br /&gt;
=== th - ไทย - Thai ===&lt;br /&gt;
* {{User|Supachai_chai}}&lt;br /&gt;
* {{User|Mrs.siam}}&lt;br /&gt;
* {{User|Ariesanywhere}}&lt;br /&gt;
&lt;br /&gt;
=== tr - Türkçe - Turkish ===&lt;br /&gt;
* {{User|Enes}}&lt;br /&gt;
* {{User|Ugur}}&lt;br /&gt;
* {{User|Umitkenan}}&lt;br /&gt;
&lt;br /&gt;
=== ukr - Українська - Ukrainian ===&lt;br /&gt;
* {{User|Olesya6968ak}}&lt;br /&gt;
* {{User|sera527}}&lt;br /&gt;
&lt;br /&gt;
=== ur - ur-PK - اردو - Urdu Pakistan ===&lt;br /&gt;
* {{User|hoornayyer}}&lt;br /&gt;
&lt;br /&gt;
=== vi - Tiếng Việt - Vietnamese ===&lt;br /&gt;
* {{User|huyhoa}}&lt;br /&gt;
&lt;br /&gt;
=== zh - 中文 - Chinese ===&lt;br /&gt;
* {{User|asika32764}}&lt;br /&gt;
* {{User|eyesofkids}}&lt;br /&gt;
* {{User|Guozhanfeng}}&lt;br /&gt;
* {{User|KellyXYM}}&lt;br /&gt;
* {{User|lai32290}}&lt;br /&gt;
* {{User|Mori0725ken}}&lt;br /&gt;
* {{User|myskies}}&lt;br /&gt;
* {{User|Wulijun01234}}&lt;br /&gt;
* {{User|Zace}}&lt;br /&gt;
* {{User|Zhang19min88}}&lt;br /&gt;
* {{User|Zhous98}}&lt;br /&gt;
&lt;br /&gt;
==Translation Administrators==&lt;br /&gt;
&lt;br /&gt;
The responsibilities of a Translation Administrator will require slightly more attention to the documents for translation. Translation Administrators should feel comfortable with using wiki markup, made hundreds of contributions to their specific language and assisted others in translation of docs. Administrators will need to check the documentation every few days and perform any required tasks. These tasks include re-marking pages in en-GB with edit changes, tracking language units which need translation and welcoming new translators. Ideally, we should have at least one Translation Administrator who will not be tied to any specific language and when the time comes, one Translation Administrator for active language teams.&lt;br /&gt;
&lt;br /&gt;
===Current Volunteer Translation Administrators===&lt;br /&gt;
{{:Special:ListUsers/translationadmins}}&lt;br /&gt;
&lt;br /&gt;
==Common Language Codes==&lt;br /&gt;
&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; afr - Afrikaans - Afrikaans&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ar - عربي - Arabic&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; bg - Български - Bulgarian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; bg - Български - Bulgarian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; bn - বাংলা - Bengali&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; bo - བོད་ཡིག - tibetan&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ca - Català - Catalan&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ce - Nohçi - Chechen&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; da - Dansk - Danish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; de - Deutsch - German&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; es - Español - Spanish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; fa - فارسی - Persian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; fi - Suomi - Finnish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; fr - Français - French&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; hu - Magyar - Hungarian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; hy - Հայերեն - Armenian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; id - Bahasa Indonesia - Indonesian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; is - Íslenska - Icelandic&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; it - Italiano - Italian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ja - 日本語 - Japanese&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ko - 한국어 - Korean&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; lb - Lëtzebuergesch - Luxembourgish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; min - Baso Minangkabau - Minang&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ml - liviox alvax - Malayalam&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; mr - मराठी - Marathi&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ms - Bahasa Melayu - Malay&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; nl - Nederlands - Dutch&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; pl - Polski - Polish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; pt - Português - Portuguese&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; pt-br - Português do Brasil - Brazilian Portuguese&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ro - Română - Romanian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ru - Русский - Russian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; sl - Slovenščina - Slovenianjtökók&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; sq - Shqip - Albanian&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; sv - Svenska - Swedish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; sw - Kiswahili - Swahili&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; ta - தமிழ் - Tamil&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; th - ไทย - Thai&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; tr - Türkçe - Turkish&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; vi - Tiếng Việt - Vietnamese&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;small-4 columns&amp;quot;&amp;gt; zh - 中文 - Chinese&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Documentation Wiki Policies and Guidelines]]&lt;br /&gt;
[[Category:Documentation Translation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Isac</name></author>
	</entry>
</feed>