簡體   English   中英

Laravel樞軸列過濾

[英]Laravel Pivot Column Filtering

我的代碼:

$course   = Course::find(1);
$teachers = $course->Users()->where('role_id', 1)->get();
$students = $course->Users()->where('role_id', 2)->get();

在此解決方案中,我有兩種不同的用戶類型。 Users()函數是一個belongsToMany關系。

public function Users()
{
    return $this->belongsToMany(User::class, 'course_users')->withPivot('role_id');
}

還有我的course_users表列:user_id,course_id,role_id

此代碼可以正常運行。

但是,當我查詢時,針對這種情況,我看到了兩個SQL查詢。 我只想使用一個查詢,就只能將過濾后的值傳遞給合適的變量以提高性能。 我該怎么做?

我嘗試下面的代碼。 但是它只會獲取第一個變量$ teachers,而不是$ students。

$users    = $course->Users();
$teachers = $users->where('role_id', 1)->get();
$students = $users->where('role_id', 2)->get();

您對此有何看法? 謝謝。

如果只有一個查詢很重要,則可以像這樣加載數據:

$users = $course->Users()->whereIn('role_id', [1, 2])->get();

然后使用集合來過濾數據:

$teachers = $users->where('role_id', 1);
$students = $users->where('role_id', 2);

謝謝。 我這樣解決了。

$users = $course->Users()->whereIn('role_id', [1, 2])->get();
$teachers = $users->where('pivot.role_id', 1);
$students = $users->where('pivot.role_id', 2);

暫無
暫無

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

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