{"id":9451,"date":"2021-09-06T07:00:49","date_gmt":"2021-09-05T22:00:49","guid":{"rendered":"https:\/\/blog.capilano-fw.com\/?p=9451"},"modified":"2021-08-06T17:25:35","modified_gmt":"2021-08-06T08:25:35","slug":"laravel-%e3%81%a7%e5%87%ba%e6%ac%a0%e7%a2%ba%e8%aa%8d%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b","status":"publish","type":"post","link":"https:\/\/blog.capilano-fw.com\/?p=9451","title":{"rendered":"Laravel \u3067\u51fa\u6b20\u78ba\u8a8d\u30b7\u30b9\u30c6\u30e0\u3092\u3064\u304f\u308b"},"content":{"rendered":"<p>\u3055\u3066\u3055\u3066\u3001\u3053\u306e\u9593\u8a95\u751f\u65e5\u3092\u8fce\u3048\u3001\u4eba\u751f\u304c\u5c11\u3057\u305a\u3064\u9577\u304f\u306a\u3063\u3066\u3044\u308b\u306e\u3092\u611f\u3058\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u3057\u3066\u3001\u3053\u3046\u3044\u3063\u305f\u5834\u5408\u306b\u300c<strong>\u3042\u306e\u9803\u306f\u3088\u304f\u904a\u3073\u306b\u3044\u3063\u3066\u305f\u306a<\/strong>\u300d\u3068\u304b\u300c<strong>\u3042\u306e\u65c5\u884c\u697d\u3057\u304b\u3063\u305f\u306a<\/strong>\u300d\u306a\u3093\u3066\u601d\u3044\u51fa\u3057\u305f\u308a\u3059\u308b\u306e\u3067\u3059\u304c\u3001\u305d\u308c\u3068\u540c\u6642\u306b\u300c\u3061\u3087\u3063\u3068\u3057\u305f\u3084\u3063\u304b\u3044\u4e8b\u300d\u304c\u3042\u308b\u306e\u3092\u601d\u3044\u51fa\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u305d\u308c\u304c\u30fb\u30fb\u30fb\u30fb\u30fb\u30fb\u30fb<\/p>\n<p><strong style=\"font-size: 35px;\">\u51fa\u6b20\u306e\u78ba\u8a8d<\/strong><\/p>\n<p>\u3067\u3059\u3002<\/p>\n<p>\u3053\u308c\u306f\u4ed5\u4e8b\u3067\u3082\u3042\u308b\u3068\u601d\u3046\u306e\u3067\u3059\u304c\u3001\u51fa\u6b20\u3092\u3068\u308b\u3068\u304d\u3001\u4ee3\u8868\u8005\u304c\u30e1\u30f3\u30d0\u30fc\u5168\u54e1\u306b\u30e1\u30fc\u30eb\u3092\u9001\u308a\u3001\u8fd4\u4fe1\u3057\u3066\u3082\u3089\u3063\u3066\u300c<strong>A\u3055\u3093\u306f\u51fa\u5e2d\u3001B\u3055\u3093\u306f\u6b20\u5e2d\u30fb\u30fb\u30fb<\/strong>\u300d\u3068\u3044\u3046\u30ab\u30f3\u30b8\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u3053\u308c\u3063\u3066\u30e1\u30f3\u30d0\u30fc\u304c\u591a\u304f\u306a\u308b\u3068\u3081\u3093\u3069\u3046\u306b\u306a\u308a\u307e\u3059\u3088\u306d\u3002<\/p>\n<p>\u305d\u3053\u3067\u2757<\/p>\n<p>\u4eca\u56de\u306f\u3053\u306e\u300c\u51fa\u6b20\u30b7\u30b9\u30c6\u30e0\u300d\u3092<code>Laravel<\/code>\u3067\u3064\u304f\u3063\u3066\u307f\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u305f\u3002<br \/>\n\u305c\u3072\u4f55\u304b\u306e\u53c2\u8003\u306b\u306a\u308a\u307e\u3057\u305f\u3089\u5b09\u3057\u3044\u3067\u3059\u3002\ud83d\ude0a\u2728<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9238 aligncenter\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/06\/no_4.png\" alt=\"\" width=\"318\" height=\"320\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/06\/no_4.png 318w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/06\/no_4-298x300.png 298w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/06\/no_4-150x150.png 150w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/06\/no_4-100x100.png 100w\" sizes=\"auto, (max-width: 318px) 100vw, 318px\" \/>\u300c\u6700\u8fd1\u3001\u771f\u590f\u306b\u306a\u308b\u3068\u3001<br \/>\n\u98a8\u304c\u30c9\u30e9\u30a4\u30e4\u30fc\u306e\u3088\u3046\u30fb\u30fb\u30fb\u300d<\/p>\n<p><strong>\u958b\u767a\u74b0\u5883\uff1a<\/strong> Laravel 8.x\u3001Vue 3<\/p>\n<h1>\u524d\u63d0\u3068\u3057\u3066<\/h1>\n<p>\u4eca\u56de\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u51fa\u6b20\u30b7\u30b9\u30c6\u30e0\u3092\u8003\u3048\u3066\u3044\u307e\u3059\u306e\u3067\u3001<code>Laravel<\/code>\u306b\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3001\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\u304c\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u524d\u63d0\u3067\u3059\u3002<\/p>\n<p>\u3082\u3057\u307e\u3060\u306e\u65b9\u306f\u4ee5\u4e0b\u306e\u30da\u30fc\u30b8\u3092\u53c2\u8003\u306b\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><strong>\ud83d\udcdd \u53c2\u8003\u30da\u30fc\u30b8\uff1a<\/strong>\u00a0<a href=\"https:\/\/blog.capilano-fw.com\/?p=8301\">Laravel Breeze\u3067\u300c\u30b7\u30f3\u30d7\u30eb\u306a\u300d\u30ed\u30b0\u30a4\u30f3\u6a5f\u80fd\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/a><\/p>\n<p>\u5b9f\u969b\u306e\u30c6\u30fc\u30d6\u30eb\u306f\u3053\u3093\u306a\u30ab\u30f3\u30b8\u3067\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9456\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_4.png\" alt=\"\" width=\"477\" height=\"477\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_4.png 477w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_4-300x300.png 300w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_4-150x150.png 150w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_4-100x100.png 100w\" sizes=\"auto, (max-width: 477px) 100vw, 477px\" \/><\/p>\n<p>\u3067\u306f\u3001\u306f\u308a\u304d\u3063\u3066\u3084\u3063\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u2757<\/p>\n<h1>DB\u307e\u308f\u308a\u3092\u3064\u304f\u308b<\/h1>\n<p>\u307e\u305a\u306f\u30c7\u30fc\u30bf\u3092\u4fdd\u7ba1\u3059\u308b\u305f\u3081\u306eDB\u30c6\u30fc\u30d6\u30eb\u3092\u3064\u304f\u3063\u3066\u3044\u304d\u307e\u3059\u3002<br \/>\n\u4eca\u56de\u306f\u5fc5\u8981\u306b\u306a\u308b\u306e\u306f\u3001\u6b21\u306e\uff13\u3064\u3067\u3059\u3002<\/p>\n<ul>\n<li>\u30a4\u30d9\u30f3\u30c8\uff1a \u3069\u3093\u306a\u30a4\u30d9\u30f3\u30c8\u304c\u3042\u308b\u306e\u304b<\/li>\n<li>\u51fa\u6b20\uff1a \u8ab0\u304c\u51fa\u5e2d\uff0f\u6b20\u5e2d\uff0f\u672a\u56de\u7b54\u306a\u306e\u304b<\/li>\n<li>\u51fa\u6b20\u30bf\u30a4\u30d7\uff1a \u51fa\u5e2d\uff0f\u6b20\u5e2d\uff0f\u672a\u56de\u7b54\u306e\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf<\/li>\n<\/ul>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3053\u308c\u3089\u306e\u30e2\u30c7\u30eb\uff06\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3092\u3064\u304f\u3063\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:model Meeting -m<\/strong><\/pre>\n<p>\u203b \u4eca\u56de<code>Event<\/code>\u3068\u3044\u3046\u30e2\u30c7\u30eb\u3067\u3082\u826f\u304b\u3063\u305f\u306e\u3067\u3059\u304c\u3001<code>Laravel<\/code>\u306b\u306f<code>Event<\/code>\u6a5f\u80fd\u3082\u3042\u308a\u307e\u3059\u3057\u3001\u3082\u3057\u4e88\u7d04\u8a9e\u3068\u30d0\u30c3\u30c6\u30a3\u30f3\u30b0\u3059\u308b\u3068\u30a4\u30e4\u306a\u306e\u3067\u3001\u3042\u3048\u3066<code>Meeting<\/code>\u306b\u3057\u307e\u3057\u305f\u3002m(_ _)m<\/p>\n<p>\u3059\u308b\u3068\u3001\u30d5\u30a1\u30a4\u30eb\u304c\uff12\u3064\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u305d\u308c\u305e\u308c\u4e2d\u8eab\u3092\u6b21\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<p><strong>database\/migrations\/****_**_**_******_create_meetings_table.php<\/strong><\/p>\n<pre>\/\/ \u7701\u7565\r\n\r\npublic function up()\r\n{\r\n<strong>    Schema::create('meetings', function (Blueprint $table) {<\/strong>\r\n<strong>        $table-&gt;id();<\/strong>\r\n<strong>        $table-&gt;unsignedBigInteger('user_id')-&gt;comment('\u30e6\u30fc\u30b6\u30fcID');<\/strong>\r\n<strong>        $table-&gt;string('name')-&gt;comment('\u30a4\u30d9\u30f3\u30c8\u540d');<\/strong>\r\n<strong>        $table-&gt;text('description')-&gt;comment('\u30a4\u30d9\u30f3\u30c8\u8a73\u7d30');<\/strong>\r\n<strong>        $table-&gt;timestamps();<\/strong>\r\n\r\n<strong>        $table-&gt;foreign('user_id')-&gt;references('id')-&gt;on('users');<\/strong>\r\n<strong>    });<\/strong>\r\n}\r\n\r\n\/\/ \u7701\u7565<\/pre>\n<p>\u305d\u3057\u3066\u30e2\u30c7\u30eb\u3067\u3059\u3002<\/p>\n<p><strong>app\/Models\/Meeting.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace App\\Models;\r\n\r\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\r\nuse Illuminate\\Database\\Eloquent\\Model;\r\n\r\nclass Meeting extends Model\r\n{\r\n    use HasFactory;\r\n\r\n    <strong>\/\/ Relationship<\/strong>\r\n<strong>    public function attendances()<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        return $this-&gt;hasMany(MeetingAttendance::class, 'meeting_id', 'id');<\/strong>\r\n<strong>    }<\/strong>\r\n}<\/pre>\n<p>\u6b21\u306b\u3001\u51fa\u6b20\u30c7\u30fc\u30bf\u306e\u30e2\u30c7\u30eb\uff06\u30de\u30a4\u30b0\u30ec\u30fc\u30b7\u30e7\u30f3\u3067\u3059\u304c\u3001\u5148\u306b\u300c<strong>\u51fa\u6b20\u30bf\u30a4\u30d7<\/strong>\u300d\u3092\u3064\u304f\u308a\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30fc\u30bf\u306f\u4ee5\u4e0b\u306e\uff13\u3064\u3067\u3059\u3002<\/p>\n<ul>\n<li>\u51fa\u5e2d =&gt; 1<\/li>\n<li>\u6b20\u5e2d =&gt; 2<\/li>\n<li>\u672a\u56de\u7b54 =&gt; 99<\/li>\n<\/ul>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:model MeetingAttendanceType -m<\/strong><\/pre>\n<p>\u540c\u3058\u304f\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p><strong>database\/migrations\/****_**_**_******_create_meeting_attendance_types_table.php<\/strong><\/p>\n<pre>\/\/\u3000\u7701\u7565\r\n\r\npublic function up()\r\n{\r\n    Schema::create('meeting_attendance_types', function (Blueprint $table) {\r\n        $table-&gt;id();\r\n        <strong>$table-&gt;string('name')-&gt;comment('\u540d\u524d');<\/strong>\r\n    });\r\n}\r\n\r\n\/\/ \u7701\u7565<\/pre>\n<p>\u203b \u306a\u304a\u3001\u51fa\u5e2d\u30bf\u30a4\u30d7\u306f\u30de\u30b9\u30bf\u30fc\u30c7\u30fc\u30bf\u306a\u306e\u3067<code>created_at<\/code>\u3068<code>updated_at<\/code>\u306f\u7701\u7565\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>app\/Models\/MeetingAttendanceType.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace App\\Models;\r\n\r\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\r\nuse Illuminate\\Database\\Eloquent\\Model;\r\n\r\nclass MeetingAttendanceType extends Model\r\n{\r\n    use HasFactory;\r\n\r\n<strong>    public $timestamps = false; \/\/ \ud83d\udc48 \u65e5\u4ed8\u306f\u7121\u52b9\u306b\u3059\u308b<\/strong>\r\n\r\n<strong>    \/\/ Constants<\/strong>\r\n<strong>    const TYPE_YES = 1;<\/strong>\r\n<strong>    const TYPE_NO = 2;<\/strong>\r\n<strong>    const TYPE_NOT_YET = 99;<\/strong>\r\n}<\/pre>\n<p>\u3067\u306f\u3001\u51fa\u6b20\u30c6\u30fc\u30d6\u30eb\u672c\u4f53\u3067\u3059\u3002<\/p>\n<pre><strong>php artisan make:model MeetingAttendance -m<\/strong><\/pre>\n<p>\u3053\u3061\u3089\u3082\u4f5c\u6210\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p><strong>database\/migrations\/****_**_**_******_create_meeting_attendances_table.php<\/strong><\/p>\n<pre>\/\/ \u7701\u7565\r\n\r\n<strong>Schema::create('meeting_attendances', function (Blueprint $table) {<\/strong>\r\n<strong>    $table-&gt;id();<\/strong>\r\n<strong>    $table-&gt;unsignedBigInteger('user_id')-&gt;comment('\u30e6\u30fc\u30b6\u30fcID');<\/strong>\r\n<strong>    $table-&gt;unsignedBigInteger('meeting_id')-&gt;comment('\u30a4\u30d9\u30f3\u30c8ID');<\/strong>\r\n<strong>    $table-&gt;unsignedBigInteger('type_id')-&gt;comment('\u51fa\u6b20\u30bf\u30a4\u30d7ID');<\/strong>\r\n<strong>    $table-&gt;timestamps();<\/strong>\r\n\r\n<strong>    $table-&gt;foreign('user_id')-&gt;references('id')-&gt;on('users');<\/strong>\r\n<strong>    $table-&gt;foreign('meeting_id')-&gt;references('id')-&gt;on('meetings');<\/strong>\r\n<strong>    $table-&gt;foreign('type_id')-&gt;references('id')-&gt;on('meeting_attendance_types');<\/strong>\r\n<strong>});<\/strong>\r\n\r\n\/\/ \u7701\u7565<\/pre>\n<p>\u6b21\u306b\u30e2\u30c7\u30eb\u3067\u3059\u3002<\/p>\n<p><strong>app\/Models\/MeetingAttendance.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace App\\Models;\r\n\r\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\r\nuse Illuminate\\Database\\Eloquent\\Model;\r\n\r\nclass MeetingAttendance extends Model\r\n{\r\n    use HasFactory;\r\n\r\n<strong>    \/\/ Relationship<\/strong>\r\n<strong>    public function type()<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        return $this-&gt;belongsTo(MeetingAttendanceType::class, 'type_id', 'id');<\/strong>\r\n<strong>    }<\/strong>\r\n}<\/pre>\n<h1>DB\u30c7\u30fc\u30bf\u3092\u3064\u304f\u308b<\/h1>\n<p>\u3067\u306f\u3001\u300c<strong>\u51fa\u6b20\u30bf\u30a4\u30d7<\/strong>\u300d\u3092<code>meeting_attendance_types<\/code>\u30c6\u30fc\u30d6\u30eb\u306b\u767b\u9332\u3067\u304d\u308b\u3088\u3046<code>Seeder<\/code>\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u3063\u3066\u304a\u304d\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:seed MeetingAttendanceTypeSeeder<\/strong><\/pre>\n<p>\u3059\u308b\u3068<code>Seeder<\/code>\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u4e2d\u8eab\u3092\u6b21\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<p><strong>database\/seeders\/MeetingAttendanceTypeSeeder.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace Database\\Seeders;\r\n\r\n<strong>use App\\Models\\MeetingAttendanceType;<\/strong>\r\nuse Illuminate\\Database\\Seeder;\r\n\r\nclass MeetingAttendanceTypeSeeder extends Seeder\r\n{\r\n    \/**\r\n     * Run the database seeds.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function run()\r\n    {\r\n        <strong>$names = [<\/strong>\r\n<strong>            MeetingAttendanceType::TYPE_YES =&gt; '\u51fa\u5e2d',<\/strong>\r\n<strong>            MeetingAttendanceType::TYPE_NO =&gt; '\u6b20\u5e2d',<\/strong>\r\n<strong>            MeetingAttendanceType::TYPE_NOT_YET =&gt; '\u672a\u56de\u7b54',<\/strong>\r\n<strong>        ];<\/strong>\r\n\r\n<strong>        foreach ($names as $id =&gt; $name) {<\/strong>\r\n\r\n<strong>            $meeting_attendance_type = new MeetingAttendanceType();<\/strong>\r\n<strong>            $meeting_attendance_type-&gt;id = $id;<\/strong>\r\n<strong>            $meeting_attendance_type-&gt;name = $name;<\/strong>\r\n<strong>            $meeting_attendance_type-&gt;save();<\/strong>\r\n\r\n<strong>        }<\/strong>\r\n    }\r\n}<\/pre>\n<p><code>Seeder<\/code>\u306f\u3001\u4f5c\u6210\u3057\u305f\u3060\u3051\u3067\u306f\u6709\u52b9\u306b\u306f\u306a\u308a\u307e\u305b\u3093\u306e\u3067\u3001<code>Laravel<\/code>\u5074\u3078\u767b\u9332\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><strong>database\/seeders\/DatabaseSeeder.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace Database\\Seeders;\r\n\r\nuse Illuminate\\Database\\Seeder;\r\n\r\nclass DatabaseSeeder extends Seeder\r\n{\r\n    \/**\r\n     * Seed the application's database.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function run()\r\n    {\r\n        \/\/ \u7701\u7565\r\n\r\n        <strong>$this-&gt;call(MeetingAttendanceTypeSeeder::class);<\/strong>\r\n    }\r\n}<\/pre>\n<p>\u3053\u308c\u3067\u3001DB\u307e\u308f\u308a\u306e\u8a2d\u5b9a\u306f\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n<p>\u3067\u306f\u3001\u3053\u306e\u72b6\u614b\u3067DB\u3092\u518d\u69cb\u7bc9\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan migrate:fresh --seed<\/strong><\/pre>\n<p>\u5b9f\u884c\u304c\u5b8c\u4e86\u3059\u308b\u3068\u3001\u5b9f\u969b\u306e\u30c6\u30fc\u30d6\u30eb\u306f\u3053\u3046\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9463\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_2.png\" alt=\"\" width=\"356\" height=\"261\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_2.png 356w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_2-300x220.png 300w\" sizes=\"auto, (max-width: 356px) 100vw, 356px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9462\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_3.png\" alt=\"\" width=\"356\" height=\"280\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_3.png 356w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_3-300x236.png 300w\" sizes=\"auto, (max-width: 356px) 100vw, 356px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9464\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_1.png\" alt=\"\" width=\"397\" height=\"324\" \/><\/p>\n<h1>\u30a4\u30d9\u30f3\u30c8\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\uff09\u3092\u767b\u9332\u3059\u308b\u90e8\u5206\u3092\u3064\u304f\u308b<\/h1>\n<p>\u3067\u306f\u3001\u3053\u3053\u304b\u3089\u306f\u30e6\u30fc\u30b6\u30fc\u304c\u30d6\u30e9\u30a6\u30b6\u3067\u64cd\u4f5c\u3059\u308b\u90e8\u5206\u3092\u3064\u304f\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<p>\u307e\u305a\u306f\u3001\u30a4\u30d9\u30f3\u30c8\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\uff09\u3092\u767b\u9332\u3059\u308b\u90e8\u5206\u3067\u3059\u3002<\/p>\n<h2>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u3064\u304f\u308b<\/h2>\n<p>\u3067\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u3064\u304f\u308a\u307e\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:controller MeetingController<\/strong><\/pre>\n<p>\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u4e2d\u8eab\u3092\u6b21\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<p><strong>app\/Http\/Controllers\/MeetingController.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace App\\Http\\Controllers;\r\n\r\n<strong>use App\\Mail\\MeetingCreated;<\/strong>\r\n<strong>use App\\Models\\Meeting;<\/strong>\r\n<strong>use App\\Models\\MeetingAttendance;<\/strong>\r\n<strong>use App\\Models\\MeetingAttendanceType;<\/strong>\r\n<strong>use App\\Models\\User;<\/strong>\r\nuse Illuminate\\Http\\Request;\r\nuse Illuminate\\Support\\Facades\\DB;\r\nuse Illuminate\\Support\\Facades\\Mail;\r\n\r\nclass MeetingController extends Controller\r\n{\r\n    <strong>public function create()<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        $user_id = auth()-&gt;id();<\/strong>\r\n<strong>        $users = User::where('id', '!=', $user_id)-&gt;get(); \/\/ \u81ea\u5206\u4ee5\u5916\u306e\u30e6\u30fc\u30b6\u30fc\u53d6\u5f97<\/strong>\r\n\r\n<strong>        return view('meeting.create')-&gt;with([<\/strong>\r\n<strong>            'users' =&gt; $users<\/strong>\r\n<strong>        ]);<\/strong>\r\n<strong>    }<\/strong>\r\n\r\n<strong>    public function store(Request $request)<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u5272\u611b\u3057\u307e\u3059<\/strong>\r\n\r\n<strong>        $result = false;<\/strong>\r\n\r\n<strong>        DB::beginTransaction();<\/strong>\r\n\r\n<strong>        try {<\/strong>\r\n\r\n<strong>            $meeting = new Meeting();<\/strong>\r\n<strong>            $meeting-&gt;user_id = auth()-&gt;id();<\/strong>\r\n<strong>            $meeting-&gt;name = $request-&gt;name;<\/strong>\r\n<strong>            $meeting-&gt;description = $request-&gt;description;<\/strong>\r\n<strong>            $result = $meeting-&gt;save();<\/strong>\r\n\r\n<strong>            $user_ids = $request-&gt;user_ids;<\/strong>\r\n\r\n<strong>            foreach ($user_ids as $user_id) {<\/strong>\r\n\r\n<strong>                $attendance = new MeetingAttendance();<\/strong>\r\n<strong>                $attendance-&gt;user_id = $user_id;<\/strong>\r\n<strong>                $attendance-&gt;meeting_id = $meeting-&gt;id;<\/strong>\r\n<strong>                $attendance-&gt;type_id = MeetingAttendanceType::TYPE_NOT_YET;<\/strong>\r\n<strong>                $attendance-&gt;save();<\/strong>\r\n\r\n<strong>            }<\/strong>\r\n\r\n<strong>            DB::commit();<\/strong>\r\n<strong>            $result = true;<\/strong>\r\n\r\n<strong>            $this-&gt;sendMail($meeting, $user_ids);<\/strong>\r\n\r\n<strong>        } catch (\\Exception $e) {<\/strong>\r\n\r\n<strong>            DB::rollBack();<\/strong>\r\n\r\n<strong>        }<\/strong>\r\n\r\n<strong>        return ['result' =&gt; $result];<\/strong>\r\n<strong>    }<\/strong>\r\n\r\n<strong>    private function sendMail(Meeting $meeting, array $user_ids)<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        $users = User::whereIn('id', $user_ids)-&gt;get();<\/strong>\r\n<strong>        Mail::cc($users)-&gt;send(new MeetingCreated($meeting));<\/strong>\r\n<strong>    }<\/strong>\r\n}<\/pre>\n<p>\u203b \u306a\u304a\u3001\u4eca\u56de\u306e\u30e1\u30a4\u30f3\u306f\u300c\u51fa\u6b20\u30b7\u30b9\u30c6\u30e0\u300d\u306a\u306e\u3067\u51fa\u6b20\u78ba\u8a8d\u30c7\u30fc\u30bf\u306e<strong>\u4e00\u89a7\u3084\u5909\u66f4\u30fb\u524a\u9664\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u5272\u611b\u3057\u3066\u3044\u307e\u3059\u3002<\/strong><\/p>\n<h2>\u30d3\u30e5\u30fc\u3092\u3064\u304f\u308b<\/h2>\n<p>\u7d9a\u3044\u3066\u3001\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u5fc5\u8981\u306b\u306a\u308b\u30d3\u30e5\u30fc\uff08HTML\u90e8\u5206\uff09\u3092\u3064\u304f\u308a\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e<code>Blade<\/code>\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><strong>resources\/views\/meeting\/create.blade.php<\/strong><\/p>\n<pre><strong>&lt;html&gt;<\/strong>\r\n<strong>&lt;head&gt;<\/strong>\r\n<strong>    &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.1\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"&gt;<\/strong>\r\n<strong>&lt;\/head&gt;<\/strong>\r\n<strong>&lt;body&gt;<\/strong>\r\n<strong>&lt;div id=\"app\"&gt;<\/strong>\r\n<strong>    &lt;div class=\"p-4\"&gt;<\/strong>\r\n<strong>        &lt;div class=\"row\"&gt;<\/strong>\r\n<strong>            &lt;div class=\"col-6 mb-3\"&gt;<\/strong>\r\n<strong>                &lt;label class=\"form-label\"&gt;\u30a4\u30d9\u30f3\u30c8\u540d\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\u540d\uff09&lt;\/label&gt;<\/strong>\r\n<strong>                &lt;input type=\"text\" class=\"form-control\" v-model=\"params.name\"&gt;<\/strong>\r\n<strong>            &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;div class=\"row\"&gt;<\/strong>\r\n<strong>            &lt;div class=\"col-6 mb-3\"&gt;<\/strong>\r\n<strong>                &lt;label class=\"form-label\"&gt;\u8a73\u7d30&lt;\/label&gt;<\/strong>\r\n<strong>                &lt;textarea rows=\"5\" class=\"form-control\" v-model=\"params.description\"&gt;&lt;\/textarea&gt;<\/strong>\r\n<strong>            &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;div class=\"row\"&gt;<\/strong>\r\n<strong>            &lt;div class=\"col-6 mb-3\"&gt;<\/strong>\r\n<strong>                &lt;label class=\"form-label\"&gt;\u62db\u5f85\u3059\u308b\u30e6\u30fc\u30b6\u30fc&lt;\/label&gt;<\/strong>\r\n<strong>                &lt;div v-for=\"user in users\"&gt;<\/strong>\r\n<strong>                    &lt;label&gt;<\/strong>\r\n<strong>                        &lt;input type=\"checkbox\" :value=\"user.id\" v-model=\"params.user_ids\"&gt; &lt;span v-text=\"user.name\"&gt;&lt;\/span&gt;<\/strong>\r\n<strong>                    &lt;\/label&gt;<\/strong>\r\n<strong>                &lt;\/div&gt;<\/strong>\r\n<strong>            &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;button type=\"button\" class=\"btn btn-primary\" @click=\"onSubmit\"&gt;\u9001\u4fe1\u3059\u308b&lt;\/button&gt;<\/strong>\r\n<strong>    &lt;\/div&gt;<\/strong>\r\n<strong>&lt;\/div&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.1\/dist\/js\/bootstrap.min.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/unpkg.com\/vue@3.1.1\/dist\/vue.global.prod.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/axios\/0.21.1\/axios.min.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script&gt;<\/strong>\r\n\r\n<strong>    Vue.createApp({<\/strong>\r\n<strong>        data() {<\/strong>\r\n<strong>            return {<\/strong>\r\n<strong>                params: {<\/strong>\r\n<strong>                    name: '',<\/strong>\r\n<strong>                    description: '',<\/strong>\r\n<strong>                    user_ids: []<\/strong>\r\n<strong>                },<\/strong>\r\n<strong>                users: @json($users)<\/strong>\r\n<strong>            }<\/strong>\r\n<strong>        },<\/strong>\r\n<strong>        methods: {<\/strong>\r\n<strong>            onSubmit() {<\/strong>\r\n\r\n<strong>                if(confirm('\u9001\u4fe1\u3057\u307e\u3059\u3002\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f')) {<\/strong>\r\n\r\n<strong>                    const url = '{{ route('meeting.store') }}';<\/strong>\r\n\r\n<strong>                    axios.post(url, this.params)<\/strong>\r\n<strong>                        .then(response =&gt; {<\/strong>\r\n\r\n<strong>                            if(response.data.result === true) {<\/strong>\r\n\r\n<strong>                                this.params = {<\/strong>\r\n<strong>                                    name: '',<\/strong>\r\n<strong>                                    description: '',<\/strong>\r\n<strong>                                    user_ids: []<\/strong>\r\n<strong>                                }<\/strong>\r\n\r\n<strong>                                alert('\u767b\u9332\u5b8c\u4e86\uff01');<\/strong>\r\n\r\n<strong>                            }<\/strong>\r\n\r\n<strong>                        })<\/strong>\r\n<strong>                        .catch(error =&gt; {<\/strong>\r\n\r\n<strong>                            \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\u306f\u5272\u611b\u3057\u307e\u3059\u3002<\/strong>\r\n\r\n<strong>                        });<\/strong>\r\n\r\n<strong>                }<\/strong>\r\n\r\n<strong>            }<\/strong>\r\n<strong>        }<\/strong>\r\n<strong>    }).mount('#app');<\/strong>\r\n\r\n<strong>&lt;\/script&gt;<\/strong>\r\n<strong>&lt;\/body&gt;<\/strong>\r\n<strong>&lt;\/html&gt;<\/strong><\/pre>\n<h2>\u30eb\u30fc\u30c8\u3092\u767b\u9332\u3059\u308b<\/h2>\n<p>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u4f5c\u6210\u3057\u305f\u30e1\u30bd\u30c3\u30c9\u3078\u30d6\u30e9\u30a6\u30b6\u304b\u3089\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u30eb\u30fc\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p><strong>routes\/web.php<\/strong><\/p>\n<pre><strong>use App\\Http\\Controllers\\MeetingController;<\/strong>\r\n\r\n\/\/ \u7701\u7565\r\n\r\n<strong>Route::prefix('meeting')-&gt;middleware('auth')-&gt;group(function(){<\/strong>\r\n\r\n<strong>    Route::get('create', [MeetingController::class, 'create'])-&gt;name('meeting.create');<\/strong>\r\n<strong>    Route::post('store', [MeetingController::class, 'store'])-&gt;name('meeting.store');<\/strong>\r\n\r\n<strong>});<\/strong><\/pre>\n<p>\u203b \u306a\u304a\u3001\u4eca\u56de\u306f\u30ed\u30b0\u30a4\u30f3\u5fc5\u9808\u306b\u3059\u308b\u305f\u3081\u306b<code>auth<\/code>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u3064\u3051\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u30e1\u30fc\u30eb\u9001\u4fe1\u90e8\u5206\u3092\u3064\u304f\u308b<\/h2>\n<p>\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u5185\u3067\u306f\u3001\u30a4\u30d9\u30f3\u30c8\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\uff09\u304c\u767b\u9332\u3055\u308c\u305f\u6642\u70b9\u3067\u51fa\u6b20\u78ba\u8a8d\u30da\u30fc\u30b8\u306eURL\u3092\u30e1\u30fc\u30eb\u9001\u4fe1\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305d\u3053\u3067\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066<code>Mailable<\/code>\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><strong>app\/Mail\/MeetingCreated.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\n<strong>namespace App\\Mail;<\/strong>\r\n\r\nuse App\\Models\\Meeting;\r\nuse Illuminate\\Bus\\Queueable;\r\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\r\nuse Illuminate\\Mail\\Mailable;\r\nuse Illuminate\\Queue\\SerializesModels;\r\n\r\nclass MeetingCreated extends Mailable\r\n{\r\n    use Queueable, SerializesModels;\r\n\r\n    <strong>private $meeting;<\/strong>\r\n\r\n    \/**\r\n     * Create a new message instance.\r\n     *\r\n     * @return void\r\n     *\/\r\n    public function __construct(<strong>Meeting $meeting<\/strong>)\r\n    {\r\n        <strong>$this-&gt;meeting = $meeting;<\/strong>\r\n    }\r\n\r\n    \/**\r\n     * Build the message.\r\n     *\r\n     * @return $this\r\n     *\/\r\n    public function build()\r\n    {\r\n        <strong>$url = route('meeting_attendance.edit', $this-&gt;meeting-&gt;id);<\/strong>\r\n\r\n<strong>        return $this<\/strong>\r\n<strong>            -&gt;from('no-reply@example.com')<\/strong>\r\n<strong>            -&gt;subject('\u30a4\u30d9\u30f3\u30c8\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\uff09\u3078\u306e\u62db\u5f85\u304c\u3042\u308a\u307e\u3057\u305f')<\/strong>\r\n<strong>            -&gt;text('emails.meeting_created', [<\/strong>\r\n<strong>                'meeting' =&gt; $this-&gt;meeting,<\/strong>\r\n<strong>                'url' =&gt; $url<\/strong>\r\n<strong>            ]);<\/strong>\r\n    }\r\n}<\/pre>\n<p>\u305d\u3057\u3066\u3001<code>Mailable<\/code>\u306e\u4e2d\u3067\u30bb\u30c3\u30c8\u3057\u305f\u30e1\u30fc\u30eb\u6587\u9762\u3092\u3064\u304f\u308a\u307e\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><strong>resources\/views\/emails\/meeting_created.blade.php<\/strong><\/p>\n<pre><strong>\u30a4\u30d9\u30f3\u30c8\uff08\u30df\u30fc\u30c6\u30a3\u30f3\u30b0\uff09\u300c{{ $meeting-&gt;name }}\u300d\u3078\u306e\u62db\u5f85\u304c\u3042\u308a\u307e\u3057\u305f\u3002<\/strong>\r\n\r\n<strong>\u3010\u8a73\u7d30\u3011<\/strong>\r\n<strong>{{ $meeting-&gt;description }}<\/strong>\r\n\r\n<strong>\u4ee5\u4e0b\u304b\u3089\u51fa\u6b20\u3092\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/strong>\r\n\r\n<strong>{{ $url }}<\/strong><\/pre>\n<p>\u3053\u308c\u3067\u3001\u30a4\u30d9\u30f3\u30c8\u304c\u767b\u9332\u3055\u308c\u305f\u3089\u8a72\u5f53\u3059\u308b\u30e6\u30fc\u30b6\u30fc\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3055\u308c\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9458\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6.png\" alt=\"\" width=\"601\" height=\"256\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6.png 601w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6-300x128.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/p>\n<p>\u203b \u306a\u304a\u3001\u30eb\u30fc\u30c8\u304c\u5b58\u5728\u3057\u3066\u3044\u306a\u3044\u306e\u3067\u3001\u3053\u306e\u6642\u70b9\u3067\u30e1\u30fc\u30eb\u9001\u4fe1\u30c6\u30b9\u30c8\u3059\u308b\u5834\u5408\u306f\u3001<code>route('meeting_attendance.edit', $this-&gt;meeting-&gt;id);<\/code>\u306e\u90e8\u5206\u3092\u9069\u5f53\u306aURL\u306b\u5909\u66f4\u3057\u3066\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h1>\u51fa\u6b20\u3092\u56de\u7b54\u3059\u308b\u90e8\u5206\u3092\u3064\u304f\u308b<\/h1>\n<p>\u3067\u306f\u4eca\u56de\u30e1\u30a4\u30f3\u3068\u306a\u308b\u300c<strong>\u51fa\u6b20\u306e\u56de\u7b54<\/strong>\u300d\u3092\u3059\u308b\u90e8\u5206\u3067\u3059\u3002<\/p>\n<h2>\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3092\u3064\u304f\u308b<\/h2>\n<p>\u307e\u305a\u306f\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3067\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:controller MeetingAttendanceController<\/strong><\/pre>\n<p>\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u3001\u4e2d\u8eab\u3092\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/p>\n<p><strong>app\/Http\/Controllers\/MeetingAttendanceController.php<\/strong><\/p>\n<pre>&lt;?php\r\n\r\nnamespace App\\Http\\Controllers;\r\n\r\n<strong>use App\\Models\\Meeting;<\/strong>\r\n<strong>use App\\Models\\MeetingAttendance;<\/strong>\r\n<strong>use App\\Models\\MeetingAttendanceType;<\/strong>\r\nuse Illuminate\\Http\\Request;\r\n\r\nclass MeetingAttendanceController extends Controller\r\n{\r\n    <strong>public function create(Meeting $meeting)<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        $grouped_attendances = $meeting-&gt;attendances-&gt;groupBy('type_id');<\/strong>\r\n<strong>        $attendance_types = MeetingAttendanceType::pluck('name', 'id');<\/strong>\r\n\r\n<strong>        return view('meeting_attendance.create')-&gt;with([<\/strong>\r\n<strong>            'meeting' =&gt; $meeting,<\/strong>\r\n<strong>            'grouped_attendances' =&gt; $grouped_attendances,<\/strong>\r\n<strong>            'attendance_types' =&gt; $attendance_types<\/strong>\r\n<strong>        ]);<\/strong>\r\n<strong>    }<\/strong>\r\n\r\n<strong>    public function update(Meeting $meeting, Request $request)<\/strong>\r\n<strong>    {<\/strong>\r\n<strong>        \/\/ \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306f\u5272\u611b\u3057\u307e\u3059<\/strong>\r\n\r\n<strong>        $result = false;<\/strong>\r\n<strong>        $user_id = auth()-&gt;id();<\/strong>\r\n<strong>        $attendance = MeetingAttendance::where('meeting_id', $meeting-&gt;id)<\/strong>\r\n<strong>            -&gt;where('user_id', $user_id)<\/strong>\r\n<strong>            -&gt;first();<\/strong>\r\n\r\n<strong>        if(!is_null($attendance)) {<\/strong>\r\n\r\n<strong>            $attendance-&gt;type_id = $request-&gt;type_id;<\/strong>\r\n<strong>            $result = $attendance-&gt;save();<\/strong>\r\n\r\n<strong>        }<\/strong>\r\n\r\n<strong>        return ['result' =&gt; $result];<\/strong>\r\n<strong>    }<\/strong>\r\n}<\/pre>\n<h2>\u30d3\u30e5\u30fc\u3092\u3064\u304f\u308b<\/h2>\n<p>\u7d9a\u3044\u3066<code>create()<\/code>\u5185\u3067\u30bb\u30c3\u30c8\u3057\u305f\u30d3\u30e5\u30fc\uff08HTML\uff09\u3067\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><strong>resources\/views\/meeting_attendance\/create.blade.php<\/strong><\/p>\n<pre><strong>&lt;html&gt;<\/strong>\r\n<strong>&lt;head&gt;<\/strong>\r\n<strong>    &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.1\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"&gt;<\/strong>\r\n<strong>&lt;\/head&gt;<\/strong>\r\n<strong>&lt;body&gt;<\/strong>\r\n<strong>&lt;div id=\"app\"&gt;<\/strong>\r\n<strong>    &lt;div class=\"p-4\"&gt;<\/strong>\r\n<strong>        &lt;div class=\"mb-3\"&gt;<\/strong>\r\n<strong>            \u300c&lt;strong&gt;{{ $meeting-&gt;name }}&lt;\/strong&gt;\u300d\u3078\u306e\u51fa\u6b20\u306f\u3069\u3046\u3057\u307e\u3059\u304b\uff1f<\/strong>\r\n<strong>            &lt;div class=\"mt-3 mb-4\"&gt;<\/strong>\r\n<strong>                &lt;button<\/strong>\r\n<strong>                        type=\"button\"<\/strong>\r\n<strong>                        class=\"btn btn-outline-primary me-3\"<\/strong>\r\n<strong>                        v-text=\"name\"<\/strong>\r\n<strong>                        v-for=\"(name,id) in attendanceTypes\"<\/strong>\r\n<strong>                        @click=\"onSubmit(id)\"&gt;&lt;\/button&gt;<\/strong>\r\n<strong>            &lt;\/div&gt;<\/strong>\r\n<strong>            &lt;span class=\"badge bg-primary mb-2\"&gt;\u73fe\u5728\u306e\u51fa\u6b20\u72b6\u6cc1&lt;\/span&gt;<\/strong>\r\n<strong>            &lt;div class=\"p-3 bg-light\"&gt;<\/strong>\r\n<strong>                @foreach($grouped_attendances as $id =&gt; $attendances)<\/strong>\r\n<strong>                    &lt;div&gt;<\/strong>\r\n<strong>                        {{ $attendance_types[$id] }}: {{ $attendances-&gt;count() }}\u4eba<\/strong>\r\n<strong>                    &lt;\/div&gt;<\/strong>\r\n<strong>                @endforeach<\/strong>\r\n<strong>            &lt;\/div&gt;<\/strong>\r\n<strong>        &lt;\/div&gt;<\/strong>\r\n<strong>    &lt;\/div&gt;<\/strong>\r\n<strong>&lt;\/div&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.1\/dist\/js\/bootstrap.min.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/unpkg.com\/vue@3.1.1\/dist\/vue.global.prod.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/axios\/0.21.1\/axios.min.js\"&gt;&lt;\/script&gt;<\/strong>\r\n<strong>&lt;script&gt;<\/strong>\r\n\r\n<strong>    Vue.createApp({<\/strong>\r\n<strong>        data() {<\/strong>\r\n<strong>            return {<\/strong>\r\n<strong>                attendanceTypes: @json($attendance_types)<\/strong>\r\n<strong>            }<\/strong>\r\n<strong>        },<\/strong>\r\n<strong>        methods: {<\/strong>\r\n<strong>            onSubmit(typeId) {<\/strong>\r\n\r\n<strong>                if(confirm('\u9001\u4fe1\u3057\u307e\u3059\u3002\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f')) {<\/strong>\r\n\r\n<strong>                    const url = '{{ route('meeting_attendance.update', $meeting-&gt;id) }}';<\/strong>\r\n<strong>                    const params = {<\/strong>\r\n<strong>                        type_id: typeId,<\/strong>\r\n<strong>                        _method: 'PUT'<\/strong>\r\n<strong>                    };<\/strong>\r\n\r\n<strong>                    axios.post(url, params)<\/strong>\r\n<strong>                        .then(response =&gt; {<\/strong>\r\n\r\n<strong>                            if(response.data.result === true) {<\/strong>\r\n\r\n<strong>                                alert('\u767b\u9332\u5b8c\u4e86\uff01');<\/strong>\r\n<strong>                                location.reload();<\/strong>\r\n\r\n<strong>                            }<\/strong>\r\n\r\n<strong>                        })<\/strong>\r\n<strong>                        .catch(error =&gt; {<\/strong>\r\n\r\n<strong>                            \/\/ \u30a8\u30e9\u30fc\u51e6\u7406\u306f\u5272\u611b\u3057\u307e\u3059\u3002<\/strong>\r\n\r\n<strong>                        });<\/strong>\r\n\r\n<strong>                }<\/strong>\r\n\r\n<strong>            }<\/strong>\r\n<strong>        }<\/strong>\r\n<strong>    }).mount('#app');<\/strong>\r\n\r\n<strong>&lt;\/script&gt;<\/strong>\r\n<strong>&lt;\/body&gt;<\/strong>\r\n<strong>&lt;\/html&gt;<\/strong><\/pre>\n<h2>\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u3064\u304f\u308b<\/h2>\n<p>\u4eca\u56de\u306f\u30d7\u30e9\u30a4\u30d9\u30fc\u30c8\u306a\u51fa\u6b20\u78ba\u8a8d\u30b7\u30b9\u30c6\u30e0\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u306e\u3067\u3001<strong>\u62db\u5f85\u3055\u308c\u3066\u3044\u306a\u3044\u30e6\u30fc\u30b6\u30fc\u306f\u56de\u7b54\u30da\u30fc\u30b8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002<\/strong><\/p>\n<p>\u305d\u3053\u3067\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u3063\u3066\u300c<strong>\u6a29\u9650\u306e\u3042\u308b\u4eba\u3060\u3051<\/strong>\u300d\u95b2\u89a7\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<pre><strong>php artisan make:middleware IsInvitedUser<\/strong><\/pre>\n<p>\u3059\u308b\u3068\u30d5\u30a1\u30a4\u30eb\u304c\u4f5c\u6210\u3055\u308c\u308b\u306e\u3067\u3001\u4e2d\u8eab\u3092\u6b21\u306e\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<p><strong>app\/Http\/Middleware\/IsInvitedUser.php<\/strong><\/p>\n<pre>\/\/ \u7701\u7565\r\n\r\n<strong>public function handle(Request $request, Closure $next)<\/strong>\r\n<strong>{<\/strong>\r\n<strong>    if(auth()-&gt;check()) {<\/strong>\r\n\r\n<strong>        $meeting = $request-&gt;route('meeting');<\/strong>\r\n<strong>        $is_invited = $meeting-&gt;attendances-&gt;contains(function($attendance){ \/\/ \u30c7\u30fc\u30bf\u304c\u5b58\u5728\u3059\u308b\u304b\u30c1\u30a7\u30c3\u30af<\/strong>\r\n\r\n<strong>            return (intval($attendance-&gt;user_id) === intval(auth()-&gt;id()));<\/strong>\r\n\r\n<strong>        });<\/strong>\r\n\r\n<strong>        if($is_invited === true) {<\/strong>\r\n\r\n<strong>            return $next($request);<\/strong>\r\n\r\n<strong>        }<\/strong>\r\n\r\n<strong>    }<\/strong>\r\n\r\n<strong>    return redirect('\/'); \/\/ \u5f37\u5236\u30ea\u30c0\u30a4\u30ec\u30af\u30c8<\/strong>\r\n<strong>}<\/strong>\r\n\r\n\/\/ \u7701\u7565<\/pre>\n<p>\u306a\u304a\u3001\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u306f\u4f5c\u6210\u3057\u305f\u3060\u3051\u3067\u306f\u6709\u52b9\u306b\u306a\u3089\u306a\u3044\u306e\u3067\u3001<code>Laravel<\/code>\u3078\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<p><strong>app\/Http\/Kernel.php<\/strong><\/p>\n<pre>protected $routeMiddleware = [\r\n\r\n    \/\/ \u7701\u7565\r\n\r\n    <strong>'is_invited_user' =&gt; IsInvitedUser::class<\/strong>\r\n];<\/pre>\n<h2>\u30eb\u30fc\u30c8\u3092\u3064\u304f\u308b<\/h2>\n<p>\u3067\u306f\u3001\u6700\u5f8c\u306b\u30eb\u30fc\u30c8\u3092\u30bb\u30c3\u30c8\u3057\u307e\u3059\u3002<\/p>\n<p><strong>routes\/web.php<\/strong><\/p>\n<pre><strong>use App\\Http\\Controllers\\MeetingAttendanceController;<\/strong>\r\n\r\n<strong>Route::prefix('meeting_attendance')-&gt;middleware(['auth', 'is_invited_user'])-&gt;group(function(){<\/strong>\r\n\r\n<strong>    Route::get('{meeting}\/edit', [MeetingAttendanceController::class, 'create'])-&gt;name('meeting_attendance.edit');<\/strong>\r\n<strong>    Route::put('update\/{meeting}', [MeetingAttendanceController::class, 'update'])-&gt;name('meeting_attendance.update');<\/strong>\r\n\r\n<strong>});<\/strong><\/pre>\n<h1>\u30c6\u30b9\u30c8\u3057\u3066\u307f\u308b<\/h1>\n<p>\u3067\u306f\u5b9f\u969b\u306b\u30c6\u30b9\u30c8\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u2757<\/p>\n<p>\u307e\u305a\u3001\u300c\u592a\u90ce\u3055\u3093\u300d\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u300c<strong>http:\/\/******\/meeting\/create<\/strong>\u300d\u3078\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002<\/p>\n<p>\u3059\u308b\u3068\u30d5\u30a9\u30fc\u30e0\u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3067\u3001\u9069\u5f53\u306b\u5185\u5bb9\u3092\u5165\u529b\u3057\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9461\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_5.png\" alt=\"\" width=\"638\" height=\"578\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_5.png 638w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_5-300x272.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/p>\n<p>\uff08\u3044\u3064\u3082\u30d3\u30fc\u30eb\u3067\u30b9\u30df\u30de\u30bb\u30f3\ud83c\udf7a\u2728\uff09<\/p>\n<p>\u305d\u3057\u3066\u3001\u300c<strong>\u9001\u4fe1\u3059\u308b<\/strong>\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002<\/p>\n<p>\u3059\u308b\u3068\u30fb\u30fb\u30fb\u30fb\u30fb\u30fb<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9458\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6.png\" alt=\"\" width=\"601\" height=\"256\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6.png 601w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_6-300x128.png 300w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" \/><\/p>\n<p>\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3055\u308c\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3053\u3053\u3067\u3001\u300c<strong>\u592a\u90ce\u3055\u3093<\/strong>\u300d\u306f\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u3066\u3001\u6b21\u306f\u5148\u307b\u3069\u62db\u5f85\u3055\u308c\u305f\u300c<strong>\u6b21\u90ce\u3055\u3093<\/strong>\u300d\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002\uff08\u4ed6\u306e\u4eba\u306f\u30a2\u30af\u30bb\u30b9\u6a29\u9650\u304c\u306a\u3044\u304b\u3089\u3067\u3059\uff09<\/p>\n<p>\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30da\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9467\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_7.png\" alt=\"\" width=\"445\" height=\"211\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_7.png 445w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_7-300x142.png 300w\" sizes=\"auto, (max-width: 445px) 100vw, 445px\" \/><\/p>\n<p>\u3067\u306f\u3001\u4eca\u56de\u306f\u300c<strong>\u51fa\u5e2d<\/strong>\u300d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p>\u3069\u3046\u306a\u3063\u305f\u3067\u3057\u3087\u3046\u304b\u30fb\u30fb\u30fb\u30fb\u30fb\u30fb\uff1f\uff1f<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9466\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_8.png\" alt=\"\" width=\"440\" height=\"140\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_8.png 440w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_8-300x95.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/p>\n<p>\u306f\u3044\u2757<br \/>\n\u767b\u9332\u5b8c\u4e86\u306e\u30a2\u30e9\u30fc\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<p>\u6700\u5f8c\u306bOK\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u30da\u30fc\u30b8\u304c\u5909\u308f\u308b\u304b\u30c1\u30a7\u30c3\u30af\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9468\" style=\"border: 3px solid #000;\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_9.png\" alt=\"\" width=\"455\" height=\"233\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_9.png 455w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/laravel_attendance_9-300x154.png 300w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/p>\n<p>\u3046\u307e\u304f\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u2757<br \/>\n\u6210\u529f\u3067\u3059\ud83d\ude0a\u2728<\/p>\n<h1>\u4f01\u696d\u69d8\u3078\u306e\u3054\u63d0\u6848<\/h1>\n<p>\u4eca\u56de\u306f\u57fa\u672c\u7684\u306a\u90e8\u5206\u306e\u307f\u3092\u5b9f\u88c5\u3057\u307e\u3057\u305f\u304c\u3001\u62e1\u5f35\u3059\u308b\u3053\u3068\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u3064\u304f\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u30e1\u30fc\u30eb\u3060\u3051\u3067\u306a\u304f\u3001LINE \u3084 Chatwork \u306a\u3069\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\u30fb\u30b5\u30fc\u30d3\u30b9\u3068\u9023\u643a\u3067\u304d\u308b\uff08\u30e6\u30fc\u30b6\u30fc\u81ea\u4fe1\u304c\u9078\u629e\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\uff09<\/li>\n<li>\u30bf\u30a4\u30de\u30fc\u5b9f\u884c\u3092\u3064\u304b\u3063\u3066\u3001\u671f\u9650\u304c\u8feb\u3063\u3066\u3044\u308b\u306e\u306b\u307e\u3060\u56de\u7b54\u3057\u3066\u3044\u306a\u3044\u4eba\u3078\u300c\u672a\u56de\u7b54\u306e\u51fa\u6b20\u304c\u3042\u308a\u307e\u3059\u300d\u3068\u901a\u77e5\u3092\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/li>\n<li>\u51fa\u6b20\u306e\u767b\u9332\u304c\u3042\u3063\u305f\u6642\u70b9\u3067\u3001\u30a4\u30d9\u30f3\u30c8\u3092\u767b\u9332\u3057\u305f\u4eba\u306b\u300c\u73fe\u5728\u306e\u72b6\u6cc1\u300d\u3092\u77e5\u3089\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/li>\n<li>\u3082\u3057\u65e5\u6642\u306a\u3069\u30a4\u30d9\u30f3\u30c8\u306b\u5909\u66f4\u304c\u3042\u3063\u305f\u5834\u5408\u306f\u300c\u5909\u66f4\u304c\u3042\u308a\u307e\u3057\u305f\u300d\u306a\u3069\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u62db\u5f85\u30e6\u30fc\u30b6\u30fc\u5168\u54e1\u306b\u9001\u308a\u3001\u518d\u5ea6\u51fa\u6b20\u3092\u3068\u308b\u3053\u3068\u304c\u3067\u304d\u308b<\/li>\n<li>\u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u304b\u3063\u305f\u5834\u5408\u306f\u767b\u9332\u8005\u306b\u901a\u77e5\u3057\u3001\u500b\u5225\u306b\u540c\u3058\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b<\/li>\n<li>\u30e6\u30fc\u30b6\u30fc\u3054\u3068\u306b\u300c\u904e\u53bb\u306e\u51fa\u5e2d\u7387\u300d\u306a\u3069\u3092\u51fa\u3057\u610f\u6b32\u7684\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\u3059\u308b\u3002<\/li>\n<li>\u904e\u53bb\u306e\u30c7\u30fc\u30bf\u304b\u3089\u3088\u308a\u51fa\u5e2d\u3057\u3066\u304f\u308c\u308b\u65e5\u6642\u3084\u5185\u5bb9\u306e\u7d71\u8a08\u3092\u3068\u308b<\/li>\n<\/ul>\n<p>\u306a\u3069\u306a\u3069\u3002<\/p>\n<p>\u3082\u3057\u3053\u3046\u3044\u3063\u305f\u6a5f\u80fd\u3092\u3054\u5e0c\u671b\u3067\u3057\u305f\u3089\u305c\u3072\u304a\u554f\u3044\u5408\u308f\u305b\u304b\u3089\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\u3002<br \/>\n\u3069\u3046\u305e\u3088\u308d\u3057\u304f\u304a\u9858\u3044\u3044\u305f\u3057\u307e\u3059\u3002m(_ _)m<\/p>\n<h1>\u304a\u308f\u308a\u306b<\/h1>\n<p>\u3068\u3044\u3046\u3053\u3068\u3067\u3001\u4eca\u56de\u306f<code>Laravel<\/code>\u3067\u51fa\u6b20\u78ba\u8a8d\u30b7\u30b9\u30c6\u30e0\u3092\u3064\u304f\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u6700\u8fd1\u3067\u306f<code>LINE<\/code>\u306a\u3069\u3067\u3082\u540c\u69d8\u306e\u6a5f\u80fd\u304c\u3042\u308b\u3088\u3046\u3067\u3059\u304c\u3001\u65e2\u5b58\u30b7\u30b9\u30c6\u30e0\u304c\u3042\u308b\u5834\u5408\u306f\u7279\u5b9a\u306e\u30c7\u30fc\u30bf\u3092\u542b\u3081\u308b\u3053\u3068\u3082\u7c21\u5358\u3067\u3059\u3057\u3001\u307e\u305f\u5916\u90e8\u306e\u30b7\u30b9\u30c6\u30e0\u306b\u4f9d\u5b58\u3057\u306a\u3044\u305f\u3081\u60c5\u5831\u6d41\u51fa\u306e\u5371\u967a\u6027\u3082\u5c11\u306a\u304f\u3067\u304d\u308b\u3093\u3058\u3083\u306a\u3044\u3067\u3057\u3087\u3046\u304b\uff08\u3082\u3061\u308d\u3093\u30b5\u30a4\u30c8\u81ea\u4f53\u306b\u304d\u3061\u3093\u3068\u3057\u305f\u5bfe\u7b56\u3092\u3057\u306a\u3044\u3068\u3001\u3067\u3059\u304c\uff09<\/p>\n<p>\u306a\u304a\u3001\u4eca\u56de\u306b\u9650\u3089\u305a\u3067\u3059\u304c\u3001\u3084\u306f\u308a<code>Laravel<\/code>\u306e<code>Collection<\/code>\u306f\u5f37\u529b\u3060\u3068\u611f\u3058\u307e\u3057\u305f\u3002\uff08<code>contains()<\/code>\u306e\u3068\u3053\u308d\u3067\u7279\u306b\u611f\u3058\u307e\u3057\u305f\ud83d\udc4d\uff09<\/p>\n<p><code>Collection<\/code>\u306e\u30e1\u30bd\u30c3\u30c9\u3092\u77e5\u3063\u3066\u3044\u308b\u304b\u77e5\u3063\u3066\u3044\u306a\u3044\u304b\u3060\u3051\u3067\u3001\u30b3\u30fc\u30c9\u91cf\u304c\u5897\u6e1b\u3057\u307e\u3059\u3057\u3001\u3068\u3044\u3046\u3053\u3068\u306f\u7701\u30b3\u30fc\u30c9\uff06\u6642\u77ed\u304c\u3067\u304d\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n<p>\u305c\u3072\u79c1\u3082\u300c<strong>\u3053\u308c\u3092\u3084\u308b\u5fc5\u8981\u304c\u3042\u308b<\/strong>\u300d\u3068\u306a\u308b\u3068\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u898b\u306a\u304f\u3066\u3082\u30d1\u30c3\u3068\u30e1\u30bd\u30c3\u30c9\u540d\u304c\u601d\u3044\u3064\u304f\u3088\u3046\u306b\u306a\u308a\u305f\u3044\u3067\u3059\u306d\u3002<\/p>\n<p><code>Laravel<\/code>\u958b\u767a\u9663\u306b\u306f\u8db3\u3092\u5411\u3051\u3066\u5bdd\u3089\u308c\u306a\u3044\u3067\u3059\uff08\u5fc3\u304b\u3089\uff01\uff09<\/p>\n<p>\u3067\u306f\u3067\u306f\u301c\u2757<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9470 aligncenter\" src=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/no_13.png\" alt=\"\" width=\"294\" height=\"320\" srcset=\"https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/no_13.png 294w, https:\/\/blog.capilano-fw.com\/wp-content\/uploads\/2021\/08\/no_13-276x300.png 276w\" sizes=\"auto, (max-width: 294px) 100vw, 294px\" \/><\/p>\n<p style=\"text-align: center;\">\u300c\u306a\u3068\u308a\u306e\u30bf\u30a4\u30ab\u30ec\u30fc\u7f36\u8a70<br \/>\n\u304a\u3044\u3063\u3057\u3044\u3067\u3059\uff01\u300d<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3055\u3066\u3055\u3066\u3001\u3053\u306e\u9593\u8a95\u751f\u65e5\u3092\u8fce\u3048\u3001\u4eba\u751f\u304c\u5c11\u3057\u305a\u3064\u9577\u304f\u306a\u3063\u3066\u3044\u308b\u306e\u3092\u611f\u3058\u3066\u3044\u307e\u3059\u3002 \u305d\u3057\u3066\u3001\u3053\u3046\u3044\u3063\u305f\u5834\u5408\u306b\u300c\u3042\u306e\u9803\u306f\u3088\u304f\u904a\u3073\u306b\u3044\u3063\u3066\u305f\u306a\u300d\u3068\u304b\u300c\u3042\u306e\u65c5\u884c\u697d\u3057\u304b\u3063\u305f\u306a &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.capilano-fw.com\/?p=9451\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;Laravel \u3067\u51fa\u6b20\u78ba\u8a8d\u30b7\u30b9\u30c6\u30e0\u3092\u3064\u304f\u308b&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":9480,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-9451","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel"],"_links":{"self":[{"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/posts\/9451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9451"}],"version-history":[{"count":11,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/posts\/9451\/revisions"}],"predecessor-version":[{"id":9474,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/posts\/9451\/revisions\/9474"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=\/wp\/v2\/media\/9480"}],"wp:attachment":[{"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capilano-fw.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}