簡體   English   中英

雄辯地獲得所有用戶,但先從相關表訂購

[英]Eloquent get ALL users, but order from related table first

我正在建立我的第一個Laravel項目,並試圖吸引所有用戶並按他們擁有的產品數量對其進行排序。 這是我的代碼:

我有User.php

public function products()
{
    return $this->hasMany(Product::class, 'user_id');
}

Product.php

public function user()
{
    return $this->belongsTo(User::class, 'user_id', 'id');
}

UsersController.php

    public function index()
    {

        $user = User::select(DB::raw('users.*, count(*) as `products`'))
            ->join('products', 'users.id', '=', 'products.user_id')
            ->groupBy('user_id')
            ->orderBy('products', 'desc')
            ->get();

        return response($user, 200);

    }

這將返回以下JSON:

{
    id: 5,
    role: 1,
    state: 1,
    name: "Frida Greenfelder",
    email: "cummings.alfreda@example.org",
    email_verified_at: "2019-09-11 13:23:20",
    date_of_birth: "1981-01-28",
    created_at: "2019-09-11 13:23:20",
    updated_at: "2019-09-11 13:23:20",
    products: 8
},

這是可行的,但是,這只會返回擁有產品的用戶並對其進行排序。 我想做的是吸引所有用戶,然后首先按他們擁有的產品數量對其進行排序。 有些用戶沒有產品,這意味着他們的用戶ID不在產品表中。 對於沒有產品的用戶,它應該只向用戶返回產品:0。

我將如何去做呢? 我在網上搜索該確切的問題/解決方案時遇到了一些麻煩,因此也遇到了這個問題。

您可以使用Eloquent:

public function index()
{ 

    $user = User::with('products')->withCount('products')->orderBy('products_count', 'desc')->get();

   return response($user, 200);
}

暫無
暫無

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

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