Laravel 5.4 การย้ายตารางเฉพาะ


89

Hi อ่านเอกสารทั้งหมดรวมอยู่ที่นี่ในhttps://laravel.com/docs/5.4/migrations

มีวิธีการย้ายไฟล์การย้ายข้อมูลบางไฟล์อย่างไร (การย้ายข้อมูล 1 รายการเท่านั้น) ทำให้ตอนนี้ทุกครั้งที่มีการเปลี่ยนแปลงที่ฉันใช้php artisan migrate:refreshและฟิลด์ทั้งหมดจะถูกรีเซ็ต

คำตอบ:


136

ก่อนอื่นคุณควรสร้างหนึ่งmigrationไฟล์สำหรับตารางของคุณเช่น:

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

หลังจากสร้างโฟลเดอร์ทดสอบในโฟลเดอร์การโยกย้ายแล้วการย้ายข้อมูลที่สร้างขึ้นใหม่จะย้าย / คัดลอกในโฟลเดอร์ทดสอบและเรียกใช้คำสั่งด้านล่างในเทอร์มินัล / cmdของคุณเช่น:

php artisan migrate --path=/database/migrations/test/

1
ขอบคุณ. นี่คือสิ่งที่ฉันกำลังมองหา
sadiq

4
php artisan migrate --path = database / migrations / test /
works

หากยังไม่ได้ผลคุณมีคำตอบที่ดีกว่าที่stackoverflow.com/questions/19102197/…
Hari Harker

86

คุณควรเพิ่มเส้นทางไปยังไฟล์การย้ายข้อมูลของคุณเพื่อรีเฟรชตารางนี้และเรียกใช้

php artisan migrate:refresh --path=/database/migrations/fileName.php

1
คนเก่ง. ไม่มีอะไรได้ผล แต่คุณแก้ปัญหาได้ ขอบคุณมาก ๆ.
Vipertecpro

ที่ฉันกำลังมองหา :) ขอบคุณเพื่อน
VishalParkash

บางครั้งจะเป็นฐานข้อมูล / migrations / fileName.php โดยไม่มีเครื่องหมายแบ็กสแลชที่ 1
Ahmed Aboud

มันคุ้มค่าที่จะพูดถึงว่าด้วยการรีเฟรชข้อมูลทั้งหมดของคุณจะหายไป คุณควรบันทึกข้อมูลในฐานข้อมูลของคุณเป็นการส่งออกและนำเข้าหลังจากรีเฟรชหากคุณต้องการเก็บข้อมูลของคุณ
Taranis

@Taranis เพียงแค่ข้อมูลของตารางที่คุณกำลังรีเฟรชไม่ใช่ทั้งหมด
Wissem SASSI

55

เพียงดูmigrationsตารางในฐานข้อมูลของคุณจะมีรายการชื่อไฟล์การย้ายข้อมูลและค่าหมายเลขแบทช์

สมมติว่าคุณมีโครงสร้างต่อไปนี้

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

หากคุณต้องการเพียงย้อนกลับการ2016_09_07_103432_create_tabel_rolesย้ายข้อมูลให้เปลี่ยนเป็นค่าแบตช์การย้ายข้อมูลเป็น 2 ซึ่งสูงที่สุดในบรรดาทั้งหมดแล้วดำเนินการต่อไปนี้

php artisan migrate:rollback

ที่นี่เฉพาะตารางที่มีค่าแบทช์ 2 เท่านั้นที่จะถูกย้อนกลับ ตอนนี้ทำการเปลี่ยนแปลงในตารางนั้นและเรียกใช้คำสั่งคอนโซลต่อไปนี้

php artisan migrate

ค่าชุดงานในmigrationsตารางกำหนดลำดับของการย้ายข้อมูล เมื่อคุณย้อนกลับการย้ายข้อมูลที่ล่าสุดหรือมีค่าแบตช์สูงสุดจะถูกย้อนกลับในตอนแรกแล้วจึงย้อนกลับไป ดังนั้นคุณสามารถเปลี่ยนค่าในฐานข้อมูลแล้วย้อนกลับไฟล์การย้ายข้อมูลเฉพาะ

แม้ว่าจะไม่ใช่ความคิดที่ดีที่จะเปลี่ยนหมายเลขแบทช์ทุกครั้งเนื่องจากความสัมพันธ์ระหว่างโครงสร้างตาราง แต่เราสามารถใช้กรณีนี้ในบางกรณีที่การย้อนกลับตารางเดียวไม่ได้ละเมิดความสมบูรณ์ของตาราง

หวังว่าคุณจะเข้าใจ.


@MartneyAcha ฉันมีความสุขที่คุณมีวิธีแก้ปัญหาของคุณไชโย !!
Sagar Gautam

คำอธิบายที่ดี หากคุณมีความสัมพันธ์คีย์ต่างประเทศในตารางของคุณมันจะไม่ได้ผล
Ogbonna Vitalis

@OgbonnaVitalis ขอบคุณมันจะง่ายกว่าสำหรับตารางอิสระ คำตอบที่ยอมรับจะให้วิธีที่แน่นอนในการย้อนกลับและโยกย้ายตารางเดียว สำหรับตารางอิสระหลายตัวจะใช้งานได้
Sagar Gautam

15

หากคุณใช้แท็บสำหรับเติมข้อความอัตโนมัติ

php artisan migrate --path='./database/migrations/2019_12_31_115457_create_coworking_personal_memberships_table.php'

9

คุณสามารถเรียกใช้คำสั่งเช่นนี้

php artisan migrate --path=/database/migrations/2020_04_10_130703_create_test_table.php

8

คุณต้องใส่ไฟล์ลงในไดเร็กทอรีใหม่ (เช่น: selected) จากนั้นจึงนำไปใช้

php artisan migrate  --path=/database/migrations/selected

หากคุณต้องการย้อนกลับ:

php artisan migrate:rollback  --path=/database/migrations/selected

บันทึก:

php artisan migrate:refresh

การดำเนินการนี้จะย้อนกลับแล้วย้ายไฟล์การย้ายข้อมูลทั้งหมดในไดเร็กทอรีเริ่มต้น (/ database / migrations)


ไม่จำเป็นต้องสร้างไดเร็กทอรีใหม่คุณสามารถใส่ชื่อไฟล์ได้โดยตรงเช่น '--path = / database / migrations / fileName.php'
Wissem SASSI

7
php artisan help migrate

คุณจะเห็นตัวเลือก:

--path [= PATH] เส้นทางไปยังไฟล์การย้ายข้อมูลที่จะดำเนินการ

อย่างไรก็ตามคุณอาจระบุโฟลเดอร์รูทของไฟล์ที่คุณต้องการย้ายได้:

php artisan migrate --path=/database/migrations/sample.php

หรือคุณสามารถสร้างโฟลเดอร์ใหม่ในการย้ายข้อมูลจากนั้นย้ายไฟล์การย้ายข้อมูลทั้งหมดที่คุณต้องการภายใน:

php artisan migrate --path=/database/migrations/new_folder

คุณเพิ่งพลาด 's' มันควรจะเป็น 'การโยกย้าย'! php artisan migrate --path = / database / migrations / new_folder
Pasindu Jayanath

php artisan migrate --path = / database / migrations / new_folder / need the last '/'
Pasindu Jayanath

5

แค่อยากจะโพสต์วิธีแก้ปัญหาอื่นซึ่งฉันคิดว่าคุ้มค่าที่จะกล่าวถึง

  1. ค้นหาแถวที่มีชื่อการย้ายข้อมูลของคุณในตารางการย้ายข้อมูลและลบออก ควรมีลักษณะดังนี้: 2016_06_01_000001_create_oauth_auth_codes_table
  2. ลบตารางของคุณออกจากฐานข้อมูลเช่น DROP TABLE oauth_auth_codes
  3. เรียกใช้ php artisan migrate

มันจะย้ายเฉพาะตารางที่คุณต้องการและจะไม่แตะต้องสิ่งอื่นใด


4

หากคุณต้องการสร้างตารางเดียวและเฉพาะเจาะจง คุณสามารถใช้รหัสนี้ ใช้ได้กับเวอร์ชัน laravel (5.x)

php artisan migrate:refresh --path=/database/migrations/fileName.php

3

คุณสามารถย้อนกลับได้เท่านั้น:

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

คุณสามารถระบุจำนวนการย้ายข้อมูลที่จะย้อนกลับไปโดยใช้ตัวเลือก "ขั้นตอน":

php artisan migrate:rollback --step=1

มีเทคนิคบางอย่างที่นี่:

ย้อนกลับการย้ายข้อมูลหนึ่งรายการใน Laravel


3

ลบตารางและลบบันทึกออกจากตารางการย้ายข้อมูล

หลังจากนั้นคุณก็เรียกใช้การย้ายข้อมูลอีกครั้ง:

php artisan migrate

3

การแก้ไข - ลบเครื่องหมายทับก่อนฐานข้อมูล

$ php artisan migrate --path=database/migrations/migration.php

1
ไม่มีข้อมูลที่จะย้าย
zod


2

หรือคุณสามารถลบชื่อไฟล์การย้ายข้อมูลออกจากฐานข้อมูลของคุณในตาราง "การย้ายข้อมูล" จากนั้นเรียกใช้: php artitsan migration


1

คุณสามารถลองใช้ตัวเลือก --path = เพื่อกำหนดโฟลเดอร์ย่อยเฉพาะที่คุณต้องการดำเนินการและวางการโยกย้ายเฉพาะไว้ที่นั่น

หรือคุณจะต้องลบข้อมูลอ้างอิงและตารางออกจากฐานข้อมูลและตารางการโอนย้ายซึ่งไม่เหมาะ: /


1

หากคุณต้องการสร้างตารางอื่นให้สร้างไฟล์การย้ายข้อมูลใหม่ มันจะทำงาน

หากคุณสร้างการโอนย้ายชื่อusers_tableด้วยid, first_name, last_name. คุณสามารถสร้างไฟล์การย้ายเช่น

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

หากคุณต้องการเพิ่มไฟล์อื่นเช่น "สถานะ" โดยไม่ต้องย้ายข้อมูลให้รีเฟรช คุณสามารถสร้างไฟล์การย้ายข้อมูลอื่นเช่น "add_status_filed_to_users_table"

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

และอย่าลืมเพิ่มตัวเลือกการย้อนกลับ:

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

และเมื่อคุณเรียกใช้การย้ายข้อมูลด้วย php artitsan migrationก็จะย้ายไฟล์การย้ายข้อมูลใหม่

แต่ถ้าคุณเพิ่ม "สถานะ" ที่ยื่นลงในไฟล์การรวบรวมข้อมูลแรก (users_table) และเรียกใช้การย้ายข้อมูล ไม่มีอะไรจะโยกย้าย คุณต้องวิ่งphp artisan migrate:refreshคุณจำเป็นต้องใช้

หวังว่าจะช่วยได้



1

php artisan migrate --path = / database / migrations / fileName.php

เพียงทำตามคำสั่งเรียกใช้ชื่อไฟล์ commant ที่นี่ควรเป็นชื่อตารางการโอนย้ายของคุณตัวอย่าง: php artisan migrate --path = / database / migrations / 2020_02_21_101937_create_jobs_table.php


1

คุณสามารถรันคำสั่งนี้ในเทอร์มินัลของคุณเท่านั้น

php artisan migrate --path=database/migrations/2020_10_01_164611_create_asset_info_table.php

หลังจากการย้ายข้อมูลคุณควรใส่ชื่อไฟล์เฉพาะ หรือหากคุณมีโฟลเดอร์ใด ๆ ในการย้ายข้อมูลให้เพิ่มชื่อโฟลเดอร์นั้นหลังจากการย้ายข้อมูล

แบบนี้

php artisan migrate --path=database/migrations/yourfolder/2020_10_01_164611_create_asset_info_table.php

ฉันหวังว่านี่จะช่วยคุณได้บ้าง Happy Coding.



-1

ก่อนอื่นคุณควรสร้างคำสั่งต่อไปนี้:

ขั้นตอนที่ 1:

php artisan migrate:rollback

ขั้นตอนที่ 2:

php artisan migrate

ตารางของคุณจะกลับมาอยู่ในฐานข้อมูล


จะมีประโยชน์มากกว่าถ้าคุณใส่คำอธิบายเล็ก ๆ ในแต่ละขั้นตอน สิ่งนี้จะช่วยในการทำความเข้าใจผู้ใช้ว่าเกิดอะไรขึ้นจริง ดูเหมือนว่าเป็นรหัสโกงที่ทำให้สิ่งต่าง ๆ ทำงานได้อย่างน่าอัศจรรย์ แต่ผลลัพธ์อาจเลวร้ายในบางกรณี
Ashwani Agarwal

โปรดอ่านคำถามอย่างละเอียดบุคคลที่ขอเพียงตารางเดียววิธีของคุณจะย้อนกลับการย้ายข้อมูลทั้งหมดแล้วสร้างตารางทั้งหมด ยังphp artisan migration:refreshทำหน้าที่เหมือนกัน
Wajahat Hashmi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.