laravel集合只返回11个值

6tqwzwtp  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(444)

我正在为我的应用程序建立时间线,我的集合只返回11个值。我试图更改合并数据,但它总是返回11个值,这让我非常困惑,因为它们在我的代码中没有限制。

public function timeline($company_id)
{
    // USER COMPANY
    $company = auth()->user()->companies()->findOrFail($company_id);

    //GETTING DATA TO MERGE COLLECTION
    $equities = Share::where('company_id', $company_id)->get();
    $equityGrants = EquityGrant::whereIn('share_id', $equities->pluck('id')->toArray())->get();
    $warrants = Warrant::where('company_id', $company_id)->orderBy('created_at', 'DESC')->get();
    $warrantGtrants = WarrantGrant::whereIn('warrant_id', $warrants->pluck('id')->toArray())->get();
    $convertibles = Convertible::where('company_id', $company_id)->get();

    // CREATING COLLECTION
    $operations = $equities->merge($equityGrants)->merge($warrants)->merge($warrantGtrants)->merge($convertibles);
    $operations  = $operations->sortByDesc('created_at');

    // RETURNS ME ONLY 11 VALUES
    return $operations->values()->all();
}

我试过了 merge() 更少的示例,比如 $operations = $equities->merge($equityGrants)->merge($warrants)->merge($warrantGtrants) 但总有11个最大值。我需要为我的时间表返回所有数据。
请帮帮我!:)
干杯,亲爱的:)
解决方案:函数concat()而不是merge()修复了问题。

chhqkbe1

chhqkbe11#

对laravel中的集合使用merge()将导致覆盖所有元素,这些元素具有来自雄辩查询的相同ID。
我相信这就是为什么您只得到11个元素,因为这是所有具有不同id的元素的计数。

6l7fqoea

6l7fqoea2#

解决方案:函数concat()而不是merge()修复了问题。

dhxwm5r4

dhxwm5r43#

根据merge的文档,当一个键匹配时,它将被该键的最后一个项(您正在合并的集合)覆盖。
解决你问题的办法是 keyBy 方法(文件)。如果你使用 keyBy('created_at') ,它将提供一个数组,其中键是 created_at 时间戳。
虽然听起来它们是独一无二的,但是有一个很大的变化,一些链接的资源(比如 warrant 以及 warrentGrants )是在同一时刻创造的。如果是这样的话,您应该尝试在所有资源中找到另一个键或是唯一的东西。

相关问题