Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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-从数组中获取最近为各种ID创建的行_Php_Arrays_Laravel_Eloquent_Laravel 5.2 - Fatal编程技术网

Php Laravel-从数组中获取最近为各种ID创建的行

Php Laravel-从数组中获取最近为各种ID创建的行,php,arrays,laravel,eloquent,laravel-5.2,Php,Arrays,Laravel,Eloquent,Laravel 5.2,我需要一个Laravel查询,返回最近创建的各种site\u id行。目前,我有一个疑问: Score::whereIn('site_id', $sites)->where('type', 2)->select('score')->get(); 但它会返回所有站点的分数,其中type=2 目前,$sites数组只包含1,2,因此它将排除3和4的站点ID 数据库结构: 查询返回的预期结果将是以下行: 身份证号码:1,2如中所示,它们是数组中最近创建的ID行 更新: 如果我使用

我需要一个Laravel查询,返回最近创建的各种
site\u id
行。目前,我有一个疑问:

Score::whereIn('site_id', $sites)->where('type', 2)->select('score')->get();
但它会返回所有站点的分数,其中type=2

目前,
$sites
数组只包含
1,2
,因此它将排除3和4的站点ID

数据库结构:

查询返回的预期结果将是以下行:

身份证号码:1,2如中所示,它们是数组中最近创建的ID行

更新:

如果我使用:

Score::whereIn('site_id', $sites)->where('type', 2)
            ->select('score')
            ->groupBy('site_id')
            ->get();
一个
groupBy
方法,它返回我想要的两个分数,但我不确定为什么它会返回它们?我以为它会根据站点id对所有站点的分数进行分组


谢谢您的帮助。

我觉得您只需要一个orderBy(“created_at”)链接到您雄辩的查询末尾。

以下是您需要的:

有了它,您可以轻松做到这一点:

$sites = Site::with('latestScore')->find($siteIds); // Collection
// now for each site:
$site->latestScore // what you wanted
但是,如果您希望收集分数,而不是通过
网站访问分数,则使用收集方法:

$sites = Site::with('latestScore')->find($siteIds); // Collection
$scores = $sites->pluck('latestScore') // get nested elements from collection
                ->filter() // filter out null items

感谢您的回复,但orderBy仍将返回与阵列中的这些站点id相关的所有结果,它们将以某种方式进行排序。我不想要所有的结果,我只想要最近创建的结果。那么“最近创建”的截止值是多少?1小时?一天?您可以使用Carbon在有说服力的查询中轻松处理日期。希望这有帮助。没有切断,只是最近为每个网站创建了一个_id!如果站点有10行,请选择最近添加的行。如果阵列中的另一个站点有3行,请选择最近添加的一行。查看可用的收集方法,特别是“唯一”和“筛选”。他们可能会实现你的目标@Ben define last-recent?感谢您的回复,但是,如果我
dd($sites),我将返回NULL。在我的
站点
模型中,我有以下内容:
公共函数latestScore(){return$this->hasOne('App\Score')->latest();}
。但是,如果我执行'dd($siteIds),它会返回1和2(正确的)。使用
find([1,2])
会返回一个集合,因此如果您有这样的行,那么它肯定会返回它们。啊,您比我还快;)我手动输入了
->find('1')
,这就成功了。我目前正在使用
Site::where('trust_id',$trust_id)->select('id')->get()以获取ID。但我不确定为什么这样不行?如果I
dd($siteIds)
,它会在集合中显示1和2。因为传递集合(
get
)将无法按预期工作。使用
Site::where(..)->pull('id')->all()
获取一个数组,稍后可以传递到
find()
。然而,在这种情况下,你根本不需要它。只需使用('latestScore')->get()
运行
Site::where(…)->,您就可以获得所有信息。它工作得非常好。Jarek,非常感谢你。你又一次拯救了这一天!