Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel嵌套函数和第一个函数_Php_Laravel_Orm - Fatal编程技术网

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尝试过但没有改变。我认为最新版本本身就是这样