选择数组中的值,分离并查询数据库 laravel

Posted

技术标签:

【中文标题】选择数组中的值,分离并查询数据库 laravel【英文标题】:Select values in array, separate and query the database laravel 【发布时间】:2020-11-08 12:37:25 【问题描述】:

我有通过数组传入的 id,我需要将它们全部获取并在银行中进行选择,根据选择使用具有不同回报的每一个。 我可以带上数字,但无法根据数组中的记录数自动分离和使用选择。

下面是我获取数组的方式:

结果数组 $schools

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [school_type_id] => 2
            [external_id] => 
            [name] => School1
            [active] => 1
            [created_at] => 2020-02-21 23:42:11
            [updated_at] => 2020-02-21 23:42:11
            [deleted_at] => 
            [active_text] => Ativo

        )

    [1] => stdClass Object
        (
            [id] => 81
            [school_type_id] => 2
            [external_id] => 
            [name] => School2
            [active] => 1
            [created_at] => 2015-05-27 18:08:52
            [updated_at] => 2015-05-27 18:08:52
            [deleted_at] => 
            [active_text] => Ativo
           
        )

)

在我使用的控制器中,我只带入我想要的值,但我需要对它们进行选择并根据每个值分开。

控制器.php

$schools = collect($api->schools);
    $info = $schools->pluck('id');

    for($i = 0;$i<count($info);$i++)

        $select = DB::table('sys_record')
        ->where('sys_record.id_step','<=',4)
        ->where('sys_users.schoolId','=',$info[$i])
        ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
        ->get();
        $information[] = count($select);  
        print_r($information);  
/*return Array
(
    [0] => 3
)
Array
(
    [0] => 3
    [1] => 1
)

        */

数组 31 正在返回,我需要 4 个

【问题讨论】:

我相信它会返回“3”和“1”,但您将它们视为“31”,因为print_r 不会在结果之间添加任何空格或换行符。尝试将print_r 移到for 之外,看看你会得到什么 我刚看到你的编辑。所以你需要得到数组中所有条目的总和吗?如果是,则在 for 之后只需执行 array_sum( $informtation ) 即可获得它 【参考方案1】:

如果您只需要在单独的数组/集合中获取 id 值,您可以尝试使用 pluck 方法而不是 for 循环:


// Get schools as a Collection
$schools = collect($api->schools);

// Pluck out all the 'id' key values
$info = $schools->pluck('id');

【讨论】:

当我计算这个值时,它会返回 31 我把它放在一个数组中,但是我如何得到 4 而不是 31?【参考方案2】:

据我了解,您希望检索结果的总和。

为此,您的代码应如下所示:

for($i = 0;$i<count($info);$i++)

    $select = DB::table('sys_record')
    ->where('sys_record.id_step','<=',4)
    ->where('sys_users.schoolId','=',$info[$i])
    ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
    ->get();

    $information[] = count($select);


$total = array_sum($information);

print_r( $total );

或者更好一点:

$schools = collect($api->schools);
$info = $schools->pluck('id');
$information = 0;

foreach( $info as $k => $i)
    $results_count = DB::table('sys_record')
      ->where('sys_record.id_step','<=',4)
      ->where('sys_users.schoolId','=',$info[$i])
      ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
      ->count();

    $information += $results_count;


print_r( $information );

EDIT 甚至更好(不确定这是否有效,但你明白了)。这只会为所有学校运行一次查询,而不是为每所学校运行一次单独的查询:

$schools = collect($api->schools);
$info = $schools->pluck('id');

$results_count = DB::table('sys_record')
      ->where('sys_record.id_step','<=',4)
      ->whereIn('sys_users.schoolId', $info)
      ->join('sys_users', 'sys_users.id_jovens', '=', 'sys_record.id_user')
      ->count();

print_r( $results_count );

【讨论】:

@testCode 查看最新的编辑。它可能会进一步优化您的代码

以上是关于选择数组中的值,分离并查询数据库 laravel的主要内容,如果未能解决你的问题,请参考以下文章

1+X web中级 Laravel学习笔记——查询构造器简介及新增更新删除查询数据

在 Laravel 中使用“LIKE”查询将数组转换为字符串

排除 Laravel 会附加模型结果中的值

Laravel 6 - 循环并显示刀片中的值

如何获取选择选项的值,并使用它来查询数组,以填充另一个输入

如何分离从表行中获取的值并将其存储在雪花中的数组中