Saya mempunyai banyak hubungan antara pengguna dan kursus yang mengandungi jadual pangsi Users_Courses yang mengandungi nilai isComplete
值,但我似乎无法在不循环每个用户并获取他们的课程的情况下检索 isComplete
dan kemudian gelung melalui setiap kursus untuk mendapatkan data pangsi.
Semua contoh yang saya temui peta isComplete
nilai kepada kelas dengan gelung, tetapi ini nampaknya sangat membebankan program dan saya tidak begitu menarik, itulah sebabnya saya membuat kelas saya Masalah saya sendiri ialah di sini. Jika saya tidak melihat jawapan kepada soalan ini, sila pautkannya di bawah kerana saya tidak dapat mencarinya.
Selain itu, saya menggunakan Laravel-9 dan MySQL.
Struktur data yang saya dapatkan sekarang kelihatan seperti ini:
"data": [ { "id": 2, "fname": "name", "lname": "last name", "email": "mail@mail.com", "courses": [ { "id": 1, "name": "test_course_1", "description": "this is a test course for testing" }, { "id": 2, "name": "test_course_2", "description": "this is also a test course" }, { "id": 3, "name": "test_course_3", "description": "this course is a test course" } ] } ]
Saya sedang mencari cara untuk mendapatkan semula nilai pangsi isComplete
dengan Eloquent dan dapatkan data untuk kelas itu sendiri, seperti ini atau yang serupa.
Dalam erti kata lain, saya ingin menyemak sama ada pengguna menyelesaikan kursus melalui nilai jadual pangsi isComplete
seperti yang ditunjukkan dalam contoh di bawah. < /p>
"data": [ { "id": 2, "fname": "name", "lname": "last name", "email": "mail@mail.com", "courses": [ { "id": 1, "name": "test_course_1", "description": "this is a test course for testing", "isComplete": 1 }, { "id": 2, "name": "test_course_2", "description": "this is also a test course", "isComplete": 0 }, { "id": 3, "name": "test_course_3", "description": "this course is a test course", "isComplete": 0 } ] } ]
Kod semasa saya kelihatan seperti ini:
class User extends Authenticatable { public function courses() { return $this->belongsToMany(Course::class, 'user_courses') ->withPivot('isCompleted'); } }
class Course extends Model { public function users() { return $this->belongsToMany(User::class, 'user_courses') ->withPivot('isCompleted'); } }
class UserController extends Controller { public function getUsersById(int $user_id) { try { $users = User::where('id', $user_id) ->with('courses') ->get(); return response()->json([ 'success' => true, 'data' => $users ]); } catch (Throwable $th) { return response()->json([ 'success' => false, 'data' => null, 'message' => $th, ]); } } }
Saya tahu ia dipanggil isCompleted
dalam kod, tetapi ia juga dipanggil begitu dalam pangkalan data. Ini adalah salah taip yang belum diperbaiki lagi :D
Dalam erti kata lain, saya ingin menyemak sama ada pengguna telah melengkapkan kursus melalui nilai jadual pangsi isComplete seperti yang ditunjukkan dalam contoh di bawah.
Adakah anda membaca tentang menapis dengan lajur jadual pangsi dalam dokumentasi: https://laravel.com/docs/9.x/eloquent-relationships#filtering-queries-via-intermediate-table-columns
Jika anda hanya memerlukan kursus yang telah selesai, anda boleh menghubungi perhubungan
Atau anda boleh membuat perhubungan tersuai untuk lengkap dan belum selesai dalam model.
Dalam pengawal pengguna anda boleh memanggil mereka