Laravel 5.4 需要通过 eloquent 关系获取不同的记录

Laravel 5.4 need to get distinct records through eloquent relation

我有一个table"transactions"。在 table 我有多个列,它们是 id、user_id、customer_name、restaurant_name 和时间戳。 我需要的是如果我在 table 中有两个或三个相同的记录意味着 restaurant_name 重复相同的 user_id。我只需要获得唯一的记录。如果用户从同一家餐厅点了 3 次,我只需要从中获得 1 次。

示例: 如果我从 Pizza Hut 订购 3 次并从 Subway 订购 5 次。结果应包含 1 个必胜客和 1 个地铁。

注意:1个用户可能有很多笔交易

交易模型:

<?php

namespace App;
use App\restaurant;
use App\User;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{
    public function user(){
        return $this->belongsTo(User::class);
    }

    public function restaurant(){
        return $this->belongsTo(restaurant::class);
    }

    protected $fillable = [
        'user_id','customer_name', 'restaurant_name' , 'ordered_items' , 
    ];
}

用户模型:

<?php

namespace App;
use App\restaurant;
use App\User;

use Illuminate\Database\Eloquent\Model;

class Transaction extends Model
{
    public function user(){
        return $this->belongsTo(User::class);
    }

    public function restaurant(){
        return $this->belongsTo(restaurant::class);
    }

    protected $fillable = [
        'user_id','customer_name', 'restaurant_name' , 'ordered_items' , 
    ];
}

我正在尝试获得这样的预期结果,但它向我显示错误:

BadMethodCallException in Macroable.php line 74:
Method distinct does not exist.

$user->transactions->distinct("restaurant_name");

distinct 不是 Laravel 集合的现有函数,但 unique 是。

$user->transactions->unique("restaurant_name");

然而,这将查询所有交易并在代码中进行过滤。要使用查询获取不同的行,您可以执行以下操作:

$user->transactions()->groupBy('restaurant_name')->get();