2013-06-06 31 views
10

Bắt đầu từ Bộ sưu tập, tôi cần lấy một mảng giá trị của một trường cụ thể..cho tôi gọi trường này là my_id.Bộ sưu tập Magento, cách lấy mảng giá trị của một trường cụ thể

Để làm điều này, tôi sử dụng Varien_Data_Collection::setDataToAll() trên Collection..in của tôi theo cách này:

$collection_fields_array = $collection->setDataToAll(array('my_id'))->toArray(array('my_id')); 

..what tôi có được là một cái gì đó như thế này:

Array 
(
    [0] => Array 
     (
      [my_id] => 71e1bd18 
     ) 

    [1] => Array 
     (
      [my_id] => 70d47a69 
     ) 

    [2] => Array 
     (
      [my_id] => 687bed84 
     ) 

    [3] => Array 
     (
      [my_id] => 673df159 
     ) 

    [4] => Array 
     (
      [my_id] => 66690a4c 
     ) 

    [5] => Array 
     (
      [my_id] => 65994440 
     ) 
) 

But..if của tôi Bộ sưu tập có chứa một số lượng lớn các mục .. setDataToAll() trở nên quá tốn thời gian và cuối cùng làm hỏng tất cả 2Gb (!!!) bộ nhớ ... điều này là do sự lặp lại của nó giữa tất cả các mục.

Một cách khác để có được một mảng giá trị trường mà không có cách giải quyết này?

Trả lời

0

Tôi đã không ở trong tình huống cụ thể của bạn, nhưng tôi đã gặp phải sự cố tương tự khi tôi muốn thực hiện một hành động trên tất cả các đơn hàng trong trang web của tôi - các đối tượng lớn và nếu tôi vừa làm một bộ sưu tập tất cả các đơn đặt hàng , nó sẽ nhanh chóng lấp đầy bộ nhớ sẵn có và chết.

Trong trường hợp của mình, tôi đã làm việc với các đơn đặt hàng, vì vậy tôi bắt đầu lặp lại và chỉ chọn giá trị một tháng tại một thời điểm - một mã nhỏ hơn, nhưng nó làm cho kích thước bộ sưu tập dễ quản lý hơn nhiều. Bạn có thể làm một cái gì đó tương tự ở đây? Ví dụ: nếu chúng là sản phẩm, có thể lọc trên product_id và chỉ thực hiện 1.000 lần mỗi lần hoặc cho các đơn đặt hàng ngày có xu hướng hoạt động tốt nếu chúng được phân phối hơi đồng đều, v.v. Chỉ cần một số lĩnh vực mà (hợp lý) đồng đều phân chia chúng.

+0

Yes..this là một tập hợp của tất cả các đơn đặt hàng cho tôi. Những gì bạn đề nghị có thể là một giải pháp tốt ... nhưng tiếc là tôi không thể lọc chúng theo ngày..Tôi cần toàn bộ bộ: ( – Zoba82

+0

Nhưng cùng một lúc? Bạn không thể nhận được một tháng, lặp lại và làm bất cứ điều gì, nhận được tháng tiếp theo và làm bất cứ điều gì, vv? Nếu không, bạn có nhớ cập nhật câu hỏi để giải thích chi tiết hơn không? Có một số cách chúng ta có thể làm được điều đó. – Mike

31

Trong trường hợp này, bạn có thể sử dụng getColumnValues('fieldName').

Vì vậy, hãy thử này

$collection->getColumnValues('my_id')

Các vấn đề liên quan