cossack910 / CRMSystem

Laravel10 + inertia + vue
0 stars 0 forks source link

モデル周り #39

Open cossack910 opened 11 months ago

cossack910 commented 11 months ago

1対多

公式 https://readouble.com/laravel/10.x/ja/eloquent-relationships.html#one-to-many

テーブルの関係 customer.model purchase.model
1
id customer.id

customer 多側は複数形

public function purchases()
    {
        return $this->hasMany(Purchase::class);
    }

purchase

public function customer()
    {
        return $this->belongsTo(Customer::class);
    }
cossack910 commented 11 months ago

多対多

公式 https://readouble.com/laravel/10.x/ja/eloquent-relationships.html#many-to-many

purchase.model item_purchase.customer_id item_purchase.item_id item.model
1 1

modelではなく中間テーブル作成用マイグレーションファイル作成

docker exec -it crmsystem php artisan make:migration create_item_purchase_table

migrationファイル https://github.com/cossack910/CRMSystem/blob/d6c8c2caf2c9b3ca8c2533f965a99df13f081ebf/crmsystem/database/migrations/2023_12_04_100729_create_item_purchase_table.php#L1

中間テーブルへのデータ挿入

puchaseテーブルに100件データを挿入。 中間テーブルである item_purchaseテーブルに 新規で100件登録した purchase_id と item.id をattachで挿入。 https://github.com/cossack910/CRMSystem/blob/d6c8c2caf2c9b3ca8c2533f965a99df13f081ebf/crmsystem/database/seeders/DatabaseSeeder.php#L22

attachメソッド Eloquentは、多対多リレーションの作業をとても便利にする方法も提供しています。たとえば、ユーザーが多くの役割を持つことができ、役割が多くのユーザーを持つことができると想定してみましょう。attachメソッドを使用してリレーションの中間テーブルへレコードを挿入することで、ユーザーに役割を関連付けできます

モデルにリレーションを関連付けるときに、中間テーブルへ挿入する追加データの配列を渡すこともできます。

$user->roles()->attach($roleId, ['expires' => $expires]);