Aug 15, 2017

Magento 2 - Best way to mass update attribute value of a product.

Here my code.
$productIds = [1,2,34]; // List of product Ids
$productAttribute = \Magento\Framework\App\ObjectManager::getInstance()
            ->create('Magento\Catalog\Model\ResourceModel\Product\Action');
$productAttribute->updateAttributes($productIds, 
['name' => 'New Name for all product'], // List of attribute you want to update NVP
$storeId
);

Idea gets from best-way-to-update-products-attribute-value

Jul 9, 2017

Laravel5 -> Creating/Understanding Custom Validation.

Main goal to create our own validation and set message associated to our validation.

*

Implented the validation rule

$RULES = ['name' => 'required|myrule'];
Vaidator::make($ARRAY_DATA, $RULES);

*

Create custom rule. In app/Providers/AppServiceProvider.php add code below on boot function.

//  Create  your custome valitor
Validator::extend('myrule', function($attr $value, $params) {
    return ((rand(10,100)%2) == 0); // Random return failed/Pass
},
"validation.myrule"
);

// Create the  message rule message.
Validator::replacer('myrule', function($msg, $attr, $rule, $params) {
    return trans($message, ['attribute'=> $attribute]);
});

*

Create the rule message. Add entry on resources/lang/en/validation.php.


return [

'myrule' => 'Your :attribute got error.',

'custom' => [
  //  Your also add here, to override the message above for the specific file.
  // This not need unless you want some validation on specific field.
  'fieldname' => [
     'rulename' => ' This just sample custom my rule message',
   ],

  'name' => [
     'myrule' => 'My custom :attribute message override.',
   ]

]
];

Jun 29, 2017

Magento2 - Resetting admin password.

Reseting password could get 3 possible way.

1. Run command in your server console.

MAGENTO_DIR/bin/magento admin:user:create \
--admin-user="ADMINUSERNAME" \
--admin-password="NEWPASSWORD" \
--admin-email="admin@example.com" \
--admin-firstname="Admin" --admin-lastname="Admin"

2. If you dont have access to the server, you could try updating via your database server.

UPDATE admin_user 
SET password = CONCAT(SHA2('xxxxxxxYourNewPassword', 256), ':xxxxxxx:1') 
WHERE username = 'admin';
NOTE: xxxxxx character sequence is a cryptographic salt.
it is saved in app\etc\env.php file
<?php
return array (
  ...
  'crypt' => 
  array (
    'key' => '525701df74e6cba74d5e9a1bb3d935ad', //cryptographic salt
  ),
  ...

3. Use the Forgot Password.

May 31, 2017

Laravel5 - Working on multiple DB.

Some reasons you need multiple DB when you making test migration on current working application.
Like my case, you are currently working on postgresql which the old DB in in mysql. Which tester the current posgre DB. I cant made that DB as my migration destination. This I why I need multiple DB configuration.

Here simple thing I did.

* Configure database setting(config/database.php) to defined mutiple DB.
return [
    'default' => env('DB_CONNECTION', 'pgsql'),
    'fetch' => PDO::FETCH_ASSOC, 
    'connections' => [
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST'),
            'database' => env('DB_DATABASE'),
            'username' => env('DB_USERNAME'),
            'password' => env('DB_PASSWORD'),
            'charset'  => env('DB_CHARSET', 'utf8'),
            'prefix'   => env('DB_PREFIX', ''),
            'schema'   => env('DB_SCHEMA', 'core'),
        ],
        
        /*
         * START -
         * Migration Tesd DB
         */
        'migration' => [
            // My Postgre DB Destination
            'driver' => 'pgsql',
            'host' => 'localhost'
            'database' => 'dest_db',
            'username' => 'myuser,
            'password' => 'MyPaswordd',
            'charset'  => env('DB_CHARSET', 'utf8'),
            'prefix'   => env('DB_PREFIX', ''),
            'schema'   => env('DB_SCHEMA', 'core'),
        ],
        'mysql' => [
            // Source Mysql DB Data.
            'driver'    => 'mysql',
            'host'      => '192.168.101.17',
            'port'      => 3306,
            'database'  => 'src_db',
            'username'  => 'myuser',
            'password'  => 'mypassword',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            //'timezone'  => env('DB_TIMEZONE', '+00:00'),
            'strict'    => env('DB_STRICT_MODE', false),
        ],
    ],
];


While Working on migration script. I learn to use the Console feature of laravel.

$users = DB::connection('mysql')
    ->select('SELECT * FROM users '
        . 'limit 10' // For testing I put limit
    );

foreach($users as $user){
    // Create as object since "setConnection" none static
    $myuser = new \App\Model\App\Users();
    // Store the user to PSQL.
    // Assume the old and new table are same field names
    $myuser->setConnection('migration')
            ->store($user);

}

Feb 22, 2017

Laravel5 - How to log sql query?

Simple way, try to add code below on you route.

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
    \Log::debug($query->sql);
    //var_dump($query->bindings);
    //var_dump($query->time);
});


Working on 5.3