「トランザクション」というテーブルがあります。そのテーブルには、id、user_id、customer_name、restaurant_name、タイムスタンプの複数の列があります。テーブルに2つまたは3つの同じレコードがある場合、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");
distinct
はLaravelコレクションの既存の関数ではありませんが、 unique
は存在します。
$user->transactions->unique("restaurant_name");
ただし、これによりすべてのトランザクションがクエリされ、コードでフィルタリングされます。クエリを使用して個別の行を取得するには、次のようにします。
$user->transactions()->groupBy('restaurant_name')->get();