У Джоша G был ключ, который фиксировал этот код: use RegisterName ().
Три преимущества здесь:
using System;
using System.Windows;
using System.Windows.Controls;
namespace AddControlsDynamically
{
public partial class Window1 : Window
{
public void Window_Loaded(object sender, RoutedEventArgs e)
{
GenerateControls();
}
public void GenerateControls()
{
Button btnClickMe = new Button();
btnClickMe.Content = "Click Me";
btnClickMe.Name = "btnClickMe";
btnClickMe.Click += new RoutedEventHandler(this.CallMeClick);
someStackPanel.Children.Add(btnClickMe);
TextBox txtNumber = new TextBox();
txtNumber.Name = "txtNumber";
txtNumber.Text = "1776";
someStackPanel.Children.Add(txtNumber);
someStackPanel.RegisterName(txtNumber.Name, txtNumber);
}
protected void CallMeClick(object sender, RoutedEventArgs e)
{
TextBox txtNumber = (TextBox) this.someStackPanel.FindName("txtNumber");
string message = string.Format("The number is {0}", txtNumber.Text);
MessageBox.Show(message);
}
}
}
Если вы посмотрите в таблице migrations
, вы увидите, что каждая миграция имеет номер партии. Поэтому, когда вы откатываете назад, он откатывает каждую миграцию, которая была частью последней партии.
Если вы хотите только отменить последнюю миграцию, просто увеличьте номер партии на единицу. Затем в следующий раз, когда вы запустите команду rollback
, она будет откатывать только одну миграцию, поскольку она находится в «пакетной» версии.
Возможно, немного поздно ответить на этот вопрос, но вот очень хороший, чистый и эффективный способ сделать это, я чувствую.
Перед созданием ваших миграций создайте разные каталоги:
database
|
migrations
|
batch_1
batch_2
batch_3
Затем при создании ваших миграций выполните следующую команду (используя ваши таблицы в качестве примера):
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1
или
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2
или
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3
Приведенные выше команды сделают файл миграции в заданном путь к каталогу. Затем вы можете просто выполнить следующую команду для переноса файлов через назначенные им каталоги.
php artisan migrate alter_table_web_directories --path=database/migrations/batch_1
* Примечание. Вы можете изменить batch_1 на batch_2 или batch_3 или на любое другое имя папки, в которой вы храните файлы миграции в До тех пор, пока он остается в каталоге базы данных / миграции или в каком-то определенном каталоге.
Далее, если вам нужно отменить свои конкретные миграции, вы можете откатить пакетными партиями, как показано ниже:
php artisan migrate:rollback --step=1
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1
или
php artisan migrate:rollback --step=2
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2
или
php artisan migrate:rollback --step=3
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3
Использование этих методов позволит вам повысить гибкость и контроль над вашей базой данных и любыми изменениями, внесенными в вашу схему.
Откат одного шага. Исходно
php artisan migrate:rollback --step=1
И вот страница руководства: docs .
Ни в коем случае без каких-либо хлопот. Подробнее см. Ответ от Martin Bean .
INSERT INTO homestead.bb_migrations (`migration`, `batch`) VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')
что-то вроде этого
Каждый раз, когда вы откатываете, вы получаете последнюю партию миграции. используйте команду
php artisan migrate:rollback --step=1
Если вы не можете сделать то, что сказал @Martin Bean, тогда вы можете попробовать другой трюк.
Создайте новую миграцию и в этом файле в методе up () вставьте то, что находится в методе down () миграции, которую вы хотите отменить, и в методе down () вставьте метод, который находится в up ().
, например, если ваша первоначальная миграция похожа на это
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
public function down()
{
Schema::drop('users');
}
, то в новом файле миграции сделайте это
public function up()
{
Schema::drop('users');
}
public function down()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
, а затем запустите миграцию, она удалит Таблица. и если вы снова захотите вернуть его обратно.
Откат одного шага. Натурально.
php artisan migrate:rollback --step=1
Откат двух шагов. Натурально.
php artisan migrate:rollback --step=2
Поскольку указано в руководстве Laravel , вы можете откатить определенное количество миграций, используя опцию --step
php artisan migrate:rollback --step=5
Использовать команду «php artisan migrate: rollback --step = 1» для перехода к откату на 1 шаг назад.
Для получения дополнительной информации проверьте ссылку: - https://laravel.com / Docs / мастер / миграция # обкатка миграция
Миграция таблиц одна за другой.
Измените номер партии перехода, который вы хотите откат, на самый высокий.
Запустите миграцию: откат.
Не может быть самым удобным способом решения крупных проектов.
migrations
SETbatch
= 2 WHEREmigration
= 'name_of_the_migration'; – Imran Khan 16 October 2015 в 05:03