系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》
本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。
在Magento 2中,可以使用声明式模式来定义和操作数据库模式。这种方式不需要编写SQL代码,而是通过在XML文件中定义模式来实现。以下是在Magento 2中使用声明式模式的示例:
在模块的Setup目录下创建一个名为InstallSchema.php的文件,用于定义模式。以下是一个示例文件:
<?php
namespace Vendor\ModuleName\Setup;
use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class InstallSchema implements InstallSchemaInterface
{
public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$table = $setup->getConnection()->newTable(
$setup->getTable('my_custom_table')
)->addColumn(
'id',
\Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
null,
['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
'ID'
)->addColumn(
'name',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
255,
['nullable' => false],
'Name'
)->addColumn(
'description',
\Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
255,
['nullable' => false],
'Description'
)->setComment(
'My Custom Table'
);
$setup->getConnection()->createTable($table);
$setup->endSetup();
}
}上面的代码创建了一个名为"My Custom Table"的新表,其中包含一个ID列、一个名为"Name"的文本列和一个名为"Description"的文本列。
在代码中访问新表。可以使用Magento的数据库注入器来操作新表。以下是一个示例:
<?php
namespace Vendor\ModuleName\Model;
use Magento\Framework\App\ResourceConnection;
class MyModel
{
/**
* @var ResourceConnection
*/
private $resourceConnection;
public function __construct(ResourceConnection $resourceConnection)
{
$this->resourceConnection = $resourceConnection;
}
public function getAllItems()
{
$connection = $this->resourceConnection->getConnection();
$tableName = $this->resourceConnection->getTableName('my_custom_table');
$select = $connection->select()->from($tableName);
return $connection->fetchAll($select);
}
}上面的代码演示了如何从"My Custom Table"表获取所有记录。它使用了Magento的ResourceConnection类来获取数据库连接和表名。然后它创建了一个查询,使用fetchAll方法执行查询并返回结果。