I'm building a plugin that adds blocks to a matrix in an entry from the front end. I got it up and running by following the answer in this post:

How to save a matrix content of a new entry in my plugin?

How do I check if the matrix already has blocks when I fetch the entry? And then, once I know if the matrix already has blocks, how do I retain the existing data while saving new blocks via the plugin?

1 Answer 1


You can save Matrix blocks directly, without having to re-save the entry.

Craft 2

Use MatrixService::saveBlock():

$block = new MatrixBlockModel();
$block->fieldId = 5;
$block->ownerId = 100;
$block->ownerLocale = 'en_us';
$block->typeId = 2;
$block->sortOrder = 10;

    'fieldHandle' => 'value',
    // ...

$success = craft()->matrix->saveBlock($block);

Craft 3

Use craft\services\Elements::saveElement():

use Craft;
use craft\elements\MatrixBlock;

$block = new MatrixBlock();
$block->fieldId = 5;
$block->ownerId = 100;
$block->siteId = 1;
$block->typeId = 2;
$block->sortOrder = 10;

    'fieldHandle' => 'value',
    // ...

$success = Craft::$app->elements->saveElement($block);
  • 1
    Thanks, that worked for me. Here's a gist that shows how this can be used to create a new entry if there isn't one for the block to be added to yet if anyone else needs to do this: gist.github.com/bwlng/5c0bdeff62fabe247c87 Would resaving the entry after adding all the blocks update the search keywords? Commented Jul 26, 2014 at 1:15
  • @StephenBowling Yes that’s a possibility. Just updated the code example showing how you could re-save the entry's content after saving the new matrix block. Commented Jul 27, 2014 at 15:03
  • @BrandonKelly how has this changed in Craft 3? I don't see a MatrixBlockModel.
    – cmal
    Commented Nov 20, 2018 at 21:49
  • 1
    @cmal just updated my answer for Craft 3. Commented Nov 21, 2018 at 13:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.