簡體   English   中英

嘗試使用外鍵在laravel中一次將數據插入兩個表

[英]trying to insert data into two tables at once in laravel using foreign key

我面臨一個挑戰。 我正在創建一個應該有成員的會議。 因此,在創建會議時,成員需要將其保存在自己的成員表中,並將會議保存在自己的表中。 會議成員的遷移看起來像這樣

 public function up()
    {
        Schema::create('meeting_members', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string("name");
            $table->string("email");
            $table->unsignedBigInteger('Member_Id')->nullable();
            $table->foreign('Member_Id')->references('id')->on('meeting')->nullOnDelete();
            $table->timestamps();
        });
    }

會議的遷移看起來像這樣

 Schema::create('meeting', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->date('date');
            $table->time("from");
            $table->time("to");
            $table->string("title");
            $table->string("agenda");
            $table->string("file_path")->nullable();
            $table->string("location");
            $table->string('description');
            $table->string('guest_name');
            $table->string('guest_email');
            $table->string("comments");
            $table->string("status");
            $table->string("meeting_url");
            $table->string("members");
            $table->string("objective");
            $table->string("topics");
            $table->string("new_business");
            $table->string("new_comments");
            $table->string("previous_meeting");
            $table->date("next_meeting");
            $table->string("publish_status");
            $table->timestamps();
        });

這是將會議和會議成員保存到表格中的控制器。

$names = json_encode($request->input('name'));
        //dd($meetingMembers);
        $meeting = new Meeting();
        $meeting->date = $request->input("date");
        $meeting->from = $request->input("from");
        $meeting->to = $request->input("to");
        $meeting->title = $request->input("title");
        $meeting->location = $request->input("location");
        $meeting->description = $request->input("description");
        $meeting->guest_name = $request->input("guest_name");
        $meeting->guest_email = $request->input("guest_email"); 
        $meeting->members = json_encode($request->input('name'));
        $meeting->publish_status="yes";
        $meeting->status = "not-done";
        $meeting->save();

        foreach ((array)$names  as $member) {

            $meetingMembers = new MeetingMember();
            $meetingMembers->name = $member;
            $meetingMembers->save();
            echo "done";
           
         }

但挑戰在於它應該根據我創建的外鍵將成員添加到特定會議。

您需要開始在您需要首先創建的模型中定義關系。 查看 laravel 文檔中“Eloquent”的文檔,從這里開始: https ://laravel.com/docs/9.x/eloquent(查看模型是如何創建的,並了解 eloquent 如何為您映射數據庫表到 php 中的對象)

捷徑:

$ php artisan make:model <your model name>

(查看 ide-helper 以在您的 IDE 中更好地支持模型: https ://github.com/barryvdh/laravel-ide-helper)

然后:您可以在數據庫級別定義類似的關系:manyToONe、OneToMay、OneToOne 等。 查看相關文檔: https ://laravel.com/docs/9.x/eloquent-relationships

捷徑:

<?php
 
namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use App\models\MeetingMembers;
 
class Meeting extends Model
{

    protected $fillabel = [<array of writeabel fieldnames>];
//read about mass assignment here: https://laravel.com/docs/9.x/eloquent#mass-assignment
    
    public function meetingMembers()
    {
        return $this->hasMany(MeetingMembers::class); 
//assuming you have a model for meeting members as well
    }
}

設置完成后,您可以像這樣為會議創建成員:


$meetingModel = //create or aggregate your Meeting

// foreach member:
$meetinModel->MeetingMembers()->create([
   'name' => $memberName, 
   //... and further fields
]);

(進一步閱讀: https ://laravel.com/docs/9.x/eloquent-relationships#the-create-method)

我在這里的簡短指南可能不完整,所以無論如何都要通過文檔了解:) 但它應該會開始你的下一步

這應該是多對多的關系。 一個會議可以有多個成員,一個人可以是多個會議的成員。

您需要第三張表來建立將會議與人員聯系起來的關系。 請參閱 laravel 文檔: https ://laravel.com/docs/9.x/eloquent-relationships#many-to-many

meeting_user
    user_id - integer
    meeting_id - integer

然后,您可以輕松地將新成員附加到會議中,反之亦然。 見這里: https ://laravel.com/docs/9.x/eloquent-relationships#attaching-detaching

use App\Models\User;
 
$user = User::find(1);
 
$user->meetings()->attach($meetingId)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM