我正在为我的应用程序建立时间线,我的集合只返回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()修复了问题。
3条答案
按热度按时间chhqkbe11#
对laravel中的集合使用merge()将导致覆盖所有元素,这些元素具有来自雄辩查询的相同ID。
我相信这就是为什么您只得到11个元素,因为这是所有具有不同id的元素的计数。
6l7fqoea2#
解决方案:函数concat()而不是merge()修复了问题。
dhxwm5r43#
根据merge的文档,当一个键匹配时,它将被该键的最后一个项(您正在合并的集合)覆盖。
解决你问题的办法是
keyBy
方法(文件)。如果你使用keyBy('created_at')
,它将提供一个数组,其中键是created_at
时间戳。虽然听起来它们是独一无二的,但是有一个很大的变化,一些链接的资源(比如
warrant
以及warrentGrants
)是在同一时刻创造的。如果是这样的话,您应该尝试在所有资源中找到另一个键或是唯一的东西。