Kolleksiyalar və tənbəl axınlar
İlkin kolleksiyanı dəyişmədən məlumatı çevirin. Callback dəyər və açar qəbul edir. filter() açarları saxlayır; JSON siyahısı üçün sonra values() çağırın. Nöqtəli yollar massivlər, açıq obyekt xassələri və Elang modelləri ilə işləyir.
İşlək nümunə
use Elang\Support\{Collection, LazyCollection};
$stock = new Collection([
['sku' => 'A', 'quantity' => 5],
['sku' => 'B', 'quantity' => 0],
['sku' => 'C', 'quantity' => 3],
]);
$available = $stock->filter(fn ($row) => $row['quantity'] > 0)->values();
$total = $available->sum('quantity'); // 8
$codes = $available->pluck('sku')->all(); // ['A', 'C']
$stream = new LazyCollection(function () {
for ($id = 1; $id <= 1000000; $id++) yield $id;
});
$first = $stream->filter(fn ($id) => $id % 2 === 1)->take(3)->collect();
// [1, 3, 5]; the source is read only through 5.
Kolleksiya əməliyyatları
Mövcud metodlar: map, filter, reject, each, first, reduce, pluck, keyBy, groupBy, where, sortBy, take, chunk, sum, keys, values, get, all, toArray. where() ciddi bərabərlik yoxlayır. Kolleksiyadakı obyektlər dərin surətdə kopyalanmır.
Məhdud tənbəl keçid
LazyCollection hər keçiddə yeni iterable yaradan factory qəbul edir. map, filter, take, chunk, each və collect dəstəklənir. collect() nəticəni yaddaşa yığır: böyük fayllarda əvvəl lazımi hissəni məhdudlaşdırın. Chunk ölçüsü müsbət, take sayı isə sıfır və ya müsbət olmalıdır. Bu, yaddaşdakı məlumatı çevirmək üçündür; ORM sorğu qurucusu deyil.
Birlikdə yoxlayın
ORM quraşdırılmış tətbiqdə tam kataloq nümunəsini işlədin. Müvəqqəti yaddaş bazası və fake partnyor API istifadə olunur. Nəticədə "checks":"passed" görünməlidir. Nümunə entity əlaqələri, fetch join, resurs, kolleksiya və HTTP/kernel yoxlamalarını birləşdirir.
php vendor/elang/framework/examples/orm-catalog/run.php
Növbəti addım · GitHub: complete runnable source
Tez-tez edilən səhvlər
| Əlamət | Düzəliş |
|---|---|
| JSON siyahısı obyekt kimi görünür | Açarlı sətirləri filter etdikdən sonra values() çağırın. |
| sum onluq mətn qəbul etmir | sum yalnız int/float qəbul edir. Pul üçün dəqiq onluq hesab istifadə edin. |