Php laravel嵌套函数和第一个函数
我有三种型号Php laravel嵌套函数和第一个函数,php,laravel,orm,Php,Laravel,Orm,我有三种型号 视频主题,视频,视频进度 关系如下: VideoTopic: /** *主题与视频的关系 * *@return\illumb\Database\elount\Relations\hasmall */ 公共功能视频():\Illumb\Database\Eloquent\Relations\HasMany{ return$this->hasMany(“App\Video”,“topic_id”); } 视频: /** *视频与主题的关系 * *@return\illumb\Data
视频主题
,视频
,视频进度
关系如下:
VideoTopic:
/**
*主题与视频的关系
*
*@return\illumb\Database\elount\Relations\hasmall
*/
公共功能视频():\Illumb\Database\Eloquent\Relations\HasMany{
return$this->hasMany(“App\Video”,“topic_id”);
}
视频:
/**
*视频与主题的关系
*
*@return\illumb\Database\elount\Relations\BelongsTo
*/
公共函数主题():\Illumb\Database\Eloquent\Relations\BelongsTo{
返回$this->belongsTo(“App\VideoTopic”、“topic_i”);
}
公共职能进展(){
返回$this->hasMany(“App\VideoProgress”,“video_id”);
}
<代码>视频进度:
公共函数用户(){
返回$this->belongsTo(“App\User”,“User\u id”);
}
公共功能视频(){
返回$this->belongsTo(“App\Video”,“Video\u id”);
}
我正在尝试获取所有视频主题及其视频和每个视频的进度,但我只想获取保存在数据库中的最后进度,因此我的代码如下:
$topics=VideoTopic::first()->with([“videos”=>函数($query){
$query->orderBy(“订单”);
$query->with([“progress”=>函数($query){
$query->latest();
$query->take(1);
}]);
}])->orderBy(“order”)->get();
但在上面的代码中,它不是为每个视频提供一个进度,而是只提供其中一个视频保存的最后一个进度(而不是其他视频的进度)。
它只给出了最后一个
但我想要的是每个视频都有一个进度(如果有的话)
我还尝试了以下代码:
$topics=VideoTopic::first()->with([“videos”=>函数($query){
$query->orderBy(“订单”);
},“videos.progress”=>函数($query){
$query->latest();
$query->take(1);
}])->orderBy(“order”)->get();
另外,当我使用first而不是take时,它也不起作用。使用hasOne建立新关系:
public function lastProgresses() {
return $this->hasOne("App\VideoProgress", "video_id")->latest();
}
现在使用此关系而不是旧关系:
$topics = VideoTopic::with(["videos" => function ($query) {
$query->orderBy("order");
}, "videos.lastProgresses"])->orderBy("order")->first();
尝试删除
take(1)
,因为这里只需要最新的内容。如果使用orderBy('created_at','desc')
而不是latest
@FelippeDuarte latest只需按created_at命令结果会怎么样。我只想要一个progress@Matt尝试过但没有改变。我认为最新版本本身就是这样