1. Go to this page and download the library: Download yii2tech/embedded library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
yii2tech / embedded example snippets
use yii\base\Model;
use yii2tech\embedded\ContainerInterface;
use yii2tech\embedded\ContainerTrait;
class User extends Model implements ContainerInterface
{
use ContainerTrait;
public $profileData = [];
public $commentsData = [];
public function embedProfile()
{
return $this->mapEmbedded('profileData', Profile::className());
}
public function embedComments()
{
return $this->mapEmbeddedList('commentsData', Comment::className());
}
}
$user = new User();
$user->profile->firstName = 'John';
$user->profile->lastName = 'Doe';
$comment = new Comment();
$user->comments[] = $comment;
use yii\base\Model;
use yii2tech\embedded\ContainerInterface;
use yii2tech\embedded\ContainerTrait;
class User extends Model implements ContainerInterface
{
use ContainerTrait;
public $profileData = [
'firstName' => 'Unknown',
'lastName' => 'Unknown',
];
public function embedProfile()
{
return $this->mapEmbedded('profileData', Profile::className());
}
}
$user = new User();
var_dump($user->profileData); // outputs array: ['firstName' => 'Unknown', 'lastName' => 'Unknown']
$user->profile->firstName = 'John';
$user->profile->lastName = 'Doe';
var_dump($user->profileData); // outputs empty array
$user->refreshFromEmbedded();
var_dump($user->profileData); // outputs array: ['firstName' => 'John', 'lastName' => 'Doe']
use yii\base\Model;
use yii2tech\embedded\ContainerInterface;
use yii2tech\embedded\ContainerTrait;
class User extends Model implements ContainerInterface
{
use ContainerTrait;
public $commentsData = [];
public function embedComments()
{
return $this->mapEmbeddedList('commentsData', Comment::className());
}
}
$user = new User();
// ...
$comments = $user->comments; // not a copy of array - copy of object reference!
foreach ($comments as $key => $comment) {
if (...) {
unset($comments[$key]); // unsets `$user->comments[$key]`!
}
}
$comments = clone $user->comments; // creates a copy of list, but not a copy of contained objects!
$comments[0]->title = 'new value'; // actually sets `$user->comments[0]->title`!
use yii\base\Model;
use yii2tech\embedded\ContainerInterface;
use yii2tech\embedded\ContainerTrait;
class User extends Model implements ContainerInterface
{
use ContainerTrait;
public $contactData;
public function embedContact()
{
return $this->mapEmbedded('contactData', Contact::className());
}
public function rules()
{
return [
['contact', 'yii2tech\embedded\Validator'],
// ...
]
}
}
class Contact extends Model
{
public $email;
public function rules()
{
return [
['email', '
$user = User::findOne(1); // declares embedded model 'contactModel' from attribute 'contactData'
if ($user->contactModel->load(Yii::$app->request->post())) {
var_dump($user->isAttributeChanged('contactData')); // outputs `false`
$user->refreshFromEmbedded();
var_dump($user->isAttributeChanged('contactData')); // outputs `true`
}
use yii2tech\embedded\ContainerInterface;
use yii2tech\embedded\ContainerTrait;
class ActiveRecord extends \yii\mongodb\ActiveRecord implements ContainerInterface
{
use ContainerTrait;
public function beforeSave($insert)
{
if (!parent::beforeSave($insert)) {
return false;
}
$this->refreshFromEmbedded(); // populate this model attributes from embedded models' ones, ensuring they are marked as 'changed' before saving
return true;
}
}
class User extends \yii2tech\embedded\mongodb\ActiveRecord
{
public static function collectionName()
{
return 'customer';
}
public function attributes()
{
return ['_id', 'name', 'email', 'addressData', 'status'];
}
public function embedAddress()
{
return $this->mapEmbedded('addressData', UserAddress::className());
}
}
php composer.phar
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.