Laravel Eloquent 关系加入

Laravel Eloquent Relationship Join

购物车:-

id product_name price

评分:-

id product_id user_id

我有这两个table。我已经在产品模型中定义了一个关系来获得特定产品的评级。代码的输出是这样的:-

"data": [
        {
            "id": 4200,
            "name": "Anti gravity Beer Cake",
            "modal": "",
            "price": 1800,
            "discount": 0,
            "quantity": 20,
            "discription": "Good Quality Product!",
            "p_status": "active",
            "m_id": 664,
            "product_link": "anti-gravity-beer-cake--6040c2b317894",
            "product_picture": " ",
            "weight": 0,
            "weight_type": "Kilogram",
            "rating": {
                "id": 4,
                "u_id": 1,
                "product_id": 4200,
                "subject": null,
                "ratings": 4,
                "review": null,
                "type": "rating"
            }
        },
{
            "id": 4200,
            "name": "Anti gravity Beer Cake",
            "modal": "",
            "price": 1800,
            "discount": 0,
            "quantity": 20,
            "discription": "Good Quality Product!",
            "p_status": "active",
            "m_id": 664,
            "product_link": "anti-gravity-beer-cake--6040c2b317894",
            "product_picture": " ",
            "weight": 0,
            "weight_type": "Kilogram",
            "rating": {
                "id": 5,
                "u_id": 1,
                "product_id": 4200,
                "subject": null,
                "ratings": 5,
                "review": null,
                "type": "rating"
            }
        }

但我首先想要评价高的产品。我该怎么做? 产品型号:-

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class product extends Model
{
    use HasFactory;
    
    public function rating(){
        return $this->hasOne(ratings_and_review::class)->orderBy('ratings','DESC');
    }
}

试试这个....

public function rating(){
      return $this->hasOne(ratings_and_review::class)->sortByDesc('rating','ratings');
}

您可以尝试从数据库中获取数据后对 collection 进行排序,例如:

$products = Product::with('rating')->get()->sortByDesc('rating.ratings');

您可以参考collection关于laravel的文档: https://laravel.com/docs/8.x/collections