繁体   English   中英

Laravel 使用先前查询的结果查询数据库

[英]Laravel query database with results from previous query

在 Laravel 中,我尝试使用先前查询的结果查询数据库。 我当前的代码:

$firstResults = Model1:all()->sortByDesc('id')->take(1)->toArray();
$secondResults = Model2:all()->where('hash',$firstResults["hash"])->toArray();

第一个查询工作正常。 我想使用第一个查询的结果来搜索第二个表,其中“哈希”等于第一个查询结果中的“哈希”值。 运行上述代码时出现未定义索引错误:hash。

我尝试了以下方法来查看第一个查询的结果:

$firstResults = Model1:all()->sortByDesc('id')->take(1)->toArray();
var_dump($firstResults);
die();
$secondResults = Model2:all()->where('hash',$firstResults["hash"])->toArray();

结果似乎是一个数组,里面有一个数组:

数组(1) { [12]=> 数组(11) { ["id"]=> int(92) ["hash"]=> 字符串(64) "0ae34d.......

每次刷新,索引都会增加一:

数组(1) { [13]=> 数组(11) { ["id"]=> int(92) ["hash"]=> 字符串(64) "0ae34d.......

数组(1) { [14]=> 数组(11) { ["id"]=> int(92) ["hash"]=> 字符串(64) "0ae34d.......

数组(1) { [15]=> 数组(11) { ["id"]=> int(92) ["hash"]=> 字符串(64) "0ae34d.......

不知道为什么会这样,这使我无法尝试 $firstResults[12]["hash"]

您为什么不尝试与您类似的不同方法。

$firstResults = Model1:latest('id')->first()->toArray();

然后简单地说:

$secondResults = Model2:where('hash',$firstResults['hash'])->get()->toArray();

此外,collections 比 arrays 使用起来更“强大”,而且方式更灵活。 有时您当然需要将它们转换为 arrays 但我建议您也学习使用 collections。

此外,我修改了$secondResults以实际查询表而不是来自all()的集合。 在您的代码中,您所做的是检索所有表记录,然后过滤它们,但这不是查询应该如何工作的,当然随着记录越来越多,它会很重。

正如评论中所讨论的,因为您想使用 arrays 所有输出都转换为您可以使用的 arrays 。

firstResult 将返回一个单维数组,而 secondResult 将返回一个多维数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM