![](/img/trans.png)
[英]Insert into two tables simultaneously primary key and foreign key using 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.