1

Magento 1.7 からアップグレードしました。モジュール、コントローラー、ヘルパーなどの作成に成功しました。

今日は、カスタム テーブルでモデルを作成しようとしました。テーブルを自動作成したい。次の手順を実行しました。

次のディレクトリ構造を持つモジュールを作成しました。

<Ashutosh>
  <Pandey>
      <etc>
          module.xml
      <Model>
      <Setup>
          InstallSchema.php

各ファイルの内容は次のとおりです。

InstallSchema.php

<?php

namespace Ashutosh\Pandey\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class InstallSchema implements InstallSchemaInterface
{
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;
        $installer->startSetup();

        // Get table
        $tableName = $installer->getTable('ashutosh_friends');

        // Check if the table already exists
        if ($installer->getConnection()->isTableExists($tableName) != true) {
            // Create tutorial_simplenews table
            $table = $installer->getConnection()
                ->newTable($tableName)
                ->addColumn(
                    'id',
                    Table::TYPE_INTEGER,
                    null,
                    [
                        'identity' => true,
                        'unsigned' => true,
                        'nullable' => false,
                        'primary' => true
                    ],
                    'ID'
                )
                ->addColumn(
                    'name',
                    Table::TYPE_TEXT,
                    null,
                    ['nullable' => false, 'default' => ''],
                    'Title'
                )
                ->addColumn(
                    'friend_type',
                    Table::TYPE_TEXT,
                    null,
                    ['nullable' => false, 'default' => ''],
                    'Summary'
                )
                ->addColumn(
                    'created_at',
                    Table::TYPE_DATETIME,
                    null,
                    ['nullable' => false],
                    'Created At'
                )
                ->addColumn(
                    'status',
                    Table::TYPE_SMALLINT,
                    null,
                    ['nullable' => false, 'default' => '0'],
                    'Status'
                )
                ->setComment('Ashutosh Friends Table')
                ->setOption('type', 'InnoDB')
                ->setOption('charset', 'utf8');
            $installer->getConnection()->createTable($table);
        }

        $installer->endSetup();
    }
}

モジュール.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Ashutosh_Pandey" setup_version="1.0.0" active="true"/>
</config>

次に、magento2 ディレクトリのコマンド プロンプトで、次のコマンドを実行しました。

php bin/magento setup:upgrade

コマンドは正常に実行されますが、テーブルは作成されません。次に、次のコマンドも実行しました。

php bin/magento setup:db-schema:upgrade

しかし、まだ何も起こりません。

注: データベースで手動でテーブルを作成すると、テーブルを正常に読み取ることができます。

4

3 に答える 3

3

Magento は、module.xml で指定されたモジュール バージョンをデータベース テーブル setup_module のエントリと照合します。php bin/magento setup:upgrade を使用するときに、magento がインストール スクリプトを再度実行するようにトリガーするカスタム モジュールのエントリを削除してみてください。

select * from core_config_data;

delete from setup_module where module="<YOURMODULE>";
于 2015-12-23T07:54:20.957 に答える
0

変化する

if ($installer->getConnection()->isTableExists($tableName) != true) {

どちらかに

if (!$installer->getConnection()->isTableExists($tableName)) {

また

if ($installer->getConnection()->isTableExists($tableName) !== true) {

非常に小さな違い。http://php.net/manual/en/language.operators.comparison.phpを参照してください。

于 2015-12-16T17:57:29.607 に答える