【问题标题】:Laravel 8.X select all record with latest statusLaravel 8.X 选择所有最新状态的记录
【发布时间】:2021-04-29 22:22:26
【问题描述】:

我有两个模特在恋爱

门票型号

public function status(){ return $this->hasMany(Status::class); }
public function latestStatus(){ return $this->hasOne(Status::class)->latest();}

状态模型

public function tickets(){ $this->belongsTo(Ticket::class);}

我正在尝试使用此代码获取每张票的最新状态

public function scopeFilteredStatus($query){ 
 return $query->whereHas('latestStatus',function($status){ 
  $status->whereIn('status', ['status1,'status3','status6']);
})->get(); }

我得到了什么

Illuminate\Database\Eloquent\Collection {#1609 ▼
  #items: array:302 [▶]
}

期待更少的结果

id --- user_id --- ticket_id --- status --- created_at
xx --- 10001   --- 3100      --- status1 --- 2020-01-13
xx --- 10001   --- 3200      --- status3 --- 2020-01-09
xx --- 10004   --- 2900      --- status6 --- 2020-01-20
and more...

【问题讨论】:

  • 您的代码输出不够清晰,无法与预期的输出相匹配,您能否更新您的问题并告诉我们究竟是什么问题
  • 我的问题是我无法让它工作

标签: laravel eloquent laravel-8 eloquent-relationship


【解决方案1】:

在你的范围内删除get()

public function scopeFilteredStatus($query){ 
 return $query->whereHas('latestStatus',function($status){ 
  $status->whereIn('status', ['status1,'status3','status6']);
})->get(); }

public function scopeFilteredStatus($query){ 
 return $query->whereHas('latestStatus',function($status){ 
  $status->whereIn('status', ['status1,'status3','status6']);
}) }

现在试试这个:Ticket::filteredStatus()->get()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2013-03-17
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2023-02-22
    • 2019-08-28
    相关资源
    最近更新 更多