我有一张桌子"交易"。在该表中,我有多个列,分别是id,user_id,customer_name,restaurant_name和时间戳。 我需要的是,如果表中有两个或三个相同的记录,则表示restaurant_name正在重复使用相同的user_id。我只需要获得独特的记录。如果用户从同一家餐厅订购3次,我只需要从那里购买1份。
示例: 如果我订购必胜客3次,并从地铁订购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");
答案 0 :(得分:7)
distinct
不是Laravel集合的现有函数,但是unique
是。
$user->transactions->unique("restaurant_name");
然而,这将查询所有事务并过滤代码。要使用查询获取不同的行,您可以执行以下操作:
$user->transactions()->groupBy('restaurant_name')->get();