Дадаць новы слупок ў існуючую табліцу ў міграцыі

Я сапраўды не магу зразумець, як дадаць новы слупок ў маю табліцу, якая выходзіць у маёй базе дадзеных, выкарыстоўваючы структуру PHP Laravel.

Я паспрабаваў адрэдагаваць файл міграцыі ў

 public function up()
{
    Schema::create('users', function($table){

         $table->integer("paid");


    });
}

and in terminal php artisan migrate:install and migrate

Як дадаць новыя слупкі?

139
Было б карысна, калі б вы маглі б ўключаць у сябе якую-небудзь памылку, вы атрымліваеце; што вы чакаеце адбудзецца; і што на самой справе адбываецца?
дададзена аўтар Phill Sparks, крыніца
Вялікае пытанне. Існуе шмат міграцыйнай дакументацыі там, і ён паказвае вам API і як ствараць табліцы ў першы раз. Тады ўсё гэта трывае няўдачу, як вы развіваеце ваша прыкладанне больш і трэба змяніць структуру БД.
дададзена аўтар Andrew Koper, крыніца
Вялікае пытанне. Існуе шмат міграцыйнай дакументацыі там, і ён паказвае вам API і як ствараць табліцы ў першы раз. Тады ўсё гэта трывае няўдачу, як вы развіваеце ваша прыкладанне больш і трэба змяніць структуру БД.
дададзена аўтар Andrew Koper, крыніца

7 адказы

Каб стварыць міграцыю, вы можаце выкарыстоўваць Migrate: зрабіць каманду на Artisan CLI. Выкарыстоўвайце пэўнае імя, каб пазбегнуць сутыкненняў з існуючымі мадэлямі

для Laravel 3:

php artisan migrate:make add_paid_to_users

для Laravel 5+:

php artisan make:migration add_paid_to_users

Затым вы павінны выкарыстоўваць Schema :: табліца() метад (як вы падлучаецеся існуючую табліцу, не ствараючы новы). І вы можаце дадаць калонку, як гэта:

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('paid');
    });
}

і не забудзьцеся дадаць опцыю адкату:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('paid');
    });
}

Пасля гэтага вы можаце запускаць міграцыі:

php artisan migrate

Гэта ўсё добра асветлены ў дакументацыі як Laravel 3:

А для Laravel 4/Laravel 5:

змяніць:

use $table->integer('paid')->after(whichever_column); to add this field after specific column.

316
дададзена
Добрае пытанне. Я зрабіў гэта.
дададзена аўтар mikelovelyuk, крыніца
Па стане на Laravel 5, гэтая каманда цяпер будзе PHP рамесных робяць: міграцыя add_paid_to_users
дададзена аўтар mikelovelyuk, крыніца
Каб быць больш дакладным, не забудзьцеся дадаць Blueprint тыпу ў да і ўніз аргументы функцыі (напрыклад, функцыя (Blueprint $ табліца) ).
дададзена аўтар Alex, крыніца
@Eli гэта менавіта тое, што гэта трэба рабіць.
дададзена аўтар Phill Sparks, крыніца
Стварэнне міграцыі таксама разглядаецца ў дакументацыі. Вы павінны даць яму больш канкрэтную назву, як «add_paid_to_users», такім чынам ён не будзе канфліктаваць з вашай мадэллю сутыкнення.
дададзена аўтар Phill Sparks, крыніца
@JuniBrosas для Laravel 5.2 вы б правільна, гэтае пытанне было зададзена Laravel 3 ... рэчы змяніліся трохі з тых часоў!
дададзена аўтар Phill Sparks, крыніца
Прывітанне @tubes, я палатаю спасылкі. У Laravel 3 Docs цяпер размешчаны на three.laravel.com/docs
дададзена аўтар Phill Sparks, крыніца
Проста PHP рамеснік мігруе
дададзена аўтар Phill Sparks, крыніца
@Yagneshbhalala адкаце з'яўляецца «ўніз» функцыя - як адмяніць ўверх функцыю.
дададзена аўтар Phill Sparks, крыніца
@ Mike3875 гэта, верагодна, варта дадаць, што ў якасці адказу на свой уласны, калі вы думаеце, што было б карысна. Гэта будзе страчана тут у каментарах, і гэта на самай справе не тое, што я хачу, каб заблытаць свой адказ з (што складае каля Laravel 3/4)
дададзена аўтар Phill Sparks, крыніца
Ёсць у любым выпадку я магу дадаць слупок ў маёй існуючай табліцы з дапамогай міграцыі без страты дадзеных? Калі ласка, дапамажыце. дзякуй
дададзена аўтар Eli, крыніца
не хапае Blueprint ў $ табліцы, так што гэта будзе функцыя (Blueprint $ табліца)
дададзена аўтар Juni Brosas, крыніца
гледзячы на ​​яго. яго правільны адказ, дзякуй!
дададзена аўтар ichimaru, крыніца
Здаецца, любы Laravel 3 док URL перанакіроўвае на Laravel 4 Docs. Вось спасылкі на 3 док для схемы будаўнік і <�а HREF = "http://three.laravel.com/docs/database/migrations" отн = "NOFOLLOW noreferrer"> міграцыі
дададзена аўтар user700113, крыніца
Я не магу зразумець сэнс «і не забудзьцеся дадаць опцыю адкату:» Дзе я магу паставіць адкат варыянт? Калі ласка, адкажыце мне як мага хутчэй !!!
дададзена аўтар Yagnesh bhalala, крыніца
@Phill Sparks з дапамогай гэтай каманды PHP рамеснік робяць: міграцыя адкат
дададзена аўтар Yagnesh bhalala, крыніца
<�Код> $ table-> цэлы лік ( 'платны') -> пасля (whichever_column); гэта толькі падтрымлівае MySQL?
дададзена аўтар Mohammad Shoriful Islam Ronju, крыніца
Для паўнаты функцыі ўніз() таксама можа быць рэалізаваны, каб звярнуць назад міграцыю: грамадскія функцыі ўверх() {Schema :: табліца ( «карыстачоў», функцыя ($ табліца) {$ таблицы-> цэлы лік ( 'заплацілі');}); } Грамадская функцыя ўніз() {Schema :: табліца ( 'карыстальнікаў', функцыя ($ табліца) {$ table-> dropColumn (аплачваецца ');}); } Згодна з дакументацыі: адкідвання Стоўбцы
дададзена аўтар ATutorMe, крыніца
Лол, па змаўчанні гэта Schema :: стварыць ( «table_name» .. мне спатрэбілася некаторы час, каб зразумець, што павінна было быць Schema :: табліца (
дададзена аўтар P_95, крыніца
Нешта не так. Я раблю «дб: зрабіць», каб стварыць новы файл міграцыі. І тады я паставіў схемы :: табліцу ( 'карыстальнікаў', функцыя ($ табліца) {$ стол-> цэлы лік ( 'платную');}); у яго. І запусціць "PHP рамеснік мігруе", але атрыманне Фатальна памылка: Немагчыма перавызначыць клас карыстальнікаў у/Applications/XAMPP/xamppfiles/HTDOCS/AdSense/прыкладання/мі & ZWNJ; grations/2013_05_28_ & ZWNJ; 122527_users.php ў радку 3
дададзена аўтар kim larsen, крыніца

Я дадам да адказу mike3875 для будучых чытачоў, якія выкарыстоўваюць Laravel 5.1 і далей.

Для таго, каб зрабіць усё хутчэй, вы можаце выкарыстоўваць сцяг «--Настольный», як гэта:

php artisan make:migration add_paid_to_users --table="users"

Гэта дадасць да і ўніз ўтрыманне метаду аўтаматычна:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        //
    });
}

, Падобным чынам, вы можаце выкарыстоўваць - стварыць опцыю [ «table_name»] пры стварэнні новых міграцый, якія будуць дадаваць больш шаблоннага для пераносу дадзеных. Невялікая кропка, але карысна пры выкананні нагрузак з іх!

39
дададзена
@PhillSparks Вы маеце рацыю, дзякуй за ловячы маю памылку. Я абнавіў ўдакладніць версію, у якой гэта можа быць выкарыстана.
дададзена аўтар camelCase, крыніца
Гэта было не так у Laravel 5.0 Blueprint быў дададзены ў Laravel 5.1. Проста кропка асвятлення ўсё.
дададзена аўтар Phill Sparks, крыніца

Калі вы выкарыстоўваеце Laravel 5, то каманда будзе;

php artisan make:migration add_paid_to_users

Усе каманды для стварэння рэчаў (кантролеры, мадэлі, міграцыі і г.д.), былі перамешчаныя пад зрабіць: каманда .

php artisan migrate is still the same though.

23
дададзена

Вы можаце дадаваць новыя слупкі ў зыходнай Schema :: стварыць метад наступным чынам:

Schema::create('users', function($table) {
    $table->integer("paied");
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

Калі вы ўжо стварылі табліцу можна дадаць дадатковыя слупкі гэтай табліцы шляхам стварэння новай міграцыі і выкарыстоўваючы Schema :: табліца метад:

Schema::table('users', function($table) {
    $table->string("title");
    $table->text("description");
    $table->timestamps();
});

Дакументацыя даволі старанная пра гэта, і не занадта змянілася з версіі 3 ў версія 4 .

13
дададзена
ды, як эвалюцыянуюць кажа, вядома, лепш, каб прытрымлівацца арыгінальнага дызайну Laravel філасофій і выкарыстоўваць толькі « дадаць _ » дзеясловам ў пярэдняй частцы кожнага файла, каб адсочваць змены. такім чынам, яго лягчэй адсочваць змены для кантролю версій і г.д., так як новы дадатковы файл ствараецца для кожнай ітэрацыі. Калі вы толькі што прайшлі і ўсе змены « стварыць _ " было б цяжка зразумець, што х супрацоўнік, ён сапсаваў нешта шляхам выдалення індэкса, або даданне новага слупка і г.д. і да т.п., па меншай меры, што мае сэнс ў маёй галаве! :)
дададзена аўтар wired00, крыніца
Вы павінны назваць кожнага з вандровак нешта ўнікальнае пры іх стварэнні. Звычайна пачатковая стварыць Назаву create_users_table , то калі я дадаю слупкоў: add_email_password_columns_to_users .
дададзена аўтар tplaner, крыніца
Нешта не так. Я раблю «дб: зрабіць», каб стварыць новы файл міграцыі. І тады я паставіў схемы :: табліцу ( 'карыстальнікаў', функцыя ($ табліца) {$ стол-> цэлы лік ( 'платную');}); у яго. І запусціць "PHP рамеснік мігруе", але атрыманне Фатальна памылка: Немагчыма перавызначыць клас карыстальнікаў у/Applications/XAMPP/xamppfiles/HTDOCS/AdSense/прыкладання/мі & ZWNJ; grations/2013_05_28_ & ZWNJ; 122527_users.php ў радку 3
дададзена аўтар kim larsen, крыніца

вы можаце проста змяніць існуючы файл пераносу, напрыклад, даданне слупка ў табліцы, а затым у вашым тэрмінале набярыце:

$ PHP artisan migrate:refresh
6
дададзена
Гэта неверагодна небяспечна - калі некаторыя людзі маюць прабег старую версію, некаторыя з іх будуць мець новыя, і хаос наступіць. У LiquiBase, калі вы рэдагуеце файл, то ён пацерпіць няўдачу, калі відавочна не змясціць у выключэнні, каб дазволіць, і вы можаце зрабіць гэта толькі ў вельмі рэдкіх выпадках. напрыклад калі вы зробіце слупок ня-NULL, калі некаторыя базы дадзеных ужо ёсць нулявыя дадзеныя ў іх, яна зламаецца.
дададзена аўтар John Little, крыніца
Абнаўленне будзе пусты стол
дададзена аўтар JohnTaa, крыніца

Laravel 5,6

у выпадку, калі вы хочаце дадаць новы слупок ў якасці вонкавага ключа ў існуючую табліцу.

Create a new migration by executing this command : make:migration

Example :

php artisan make:migration add_store_id_to_users_table --table=users

У базе даных/міграцыі тэчкі ў вас ёсць новы файл міграцыі, нешта накшталт:

2018_08_08_093431_add_store_id_to_users_table.php (see the comments)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddStoreIdToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {

           //1. Create new column
           //You probably want to make the new column nullable
            $table->integer('store_id')->unsigned()->nullable()->after('password');

           //2. Create foreign key constraints
            $table->foreign('store_id')->references('id')->on('stores')->onDelete('SET NULL');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {

           //1. Drop foreign key constraints
            $table->dropForeign(['store_id']);

           //2. Drop the column
            $table->dropColumn('store_id');
        });
    }
}

Пасля гэтага выканайце каманду:

php artisan migrate

У выпадку, калі вы хочаце, каб адмяніць апошнюю міграцыю па любой прычыне, запусціце наступную каманду:

php artisan migrate:rollback

You can find more information about migrations in the docs

1
дададзена

гэта рэчы, працуецца на Laravel 5.1.

першы, на тэрмінале выканаць гэты код

php artisan make:migration add_paid_to_users --table=users

Пасля гэтага перайдзіце ў каталог праекта і пашырэнне базы дадзеных каталога - міграцыя і рэдагаваць файл add_paid_to_users.php, дадайце гэты код

public function up()
{
    Schema::table('users', function (Blueprint $table) {
         $table->string('paid'); //just add this line
    });
}

пасля гэтага вярнуцца да тэрмінала і выканаць гэтую каманду

php artisan migrate

спадзяюся, што гэта дапаможа.

1
дададзена