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();
我有一个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();