2013-02-04 35 views
5

Tôi đã tạo một thực thể có hành vi Sortable và có một câu hỏi về việc sử dụng nó.
Các phương pháp để thiết lập và nhận được vị trí là không đủ đối với tôi, vì vậy tôi muốn làm đơn giản moveUpmoveDown phương pháp với đoạn mã sau:Sắp xếp các thực thể với hành vi có thể sắp xếp trong Doctrine 2 (Symfony 2)

public function moveUp() { 
    ++$this->position; 
} 

public function moveDown() { 
    if($this->position != 0) 
     --$this->position; 
} 

Với thi này moveUp phương pháp có không có giới hạn cho việc tăng hạng mục với vị trí đã tối đa. Cách tốt nhất để cấm tăng các mục như vậy là gì? Tôi nghe nói rằng thực hiện các truy vấn tùy chỉnh trực tiếp trong các thực thể không phải là một thực hành tốt, vì vậy làm cách nào tôi có thể kiểm tra xem mục đã có giá trị tối đa chưa?

Trả lời

0

bạn cũng có thể có trình xử lý sự kiện được nối với các đối tượng SortableMaxAware d với giá trị tối đa được lấy từ cơ sở dữ liệu. Đây là tất nhiên rườm rà, nhưng hey bạn đang sử dụng ORM :) vui chơi.

2

Cùng một vấn đề ở đây, bằng cách đọc mã tôi nhận thấy rằng:

// Compute position if it is negative 
if ($newPosition < 0) { 
    $newPosition += $this->maxPositions[$hash] + 2; // position == -1 => append at end of list 
    if ($newPosition < 0) $newPosition = 0; 
} 

(trong SortableListener:141)

Tôi đoán rằng bằng cách thiết lập -1 như vị trí, nó sẽ được chuyển đến cuối danh sách . Và -2 sẽ đặt nó từ giây đến cuối.


Sửa: Xin lỗi tôi đã trả lời quá nhanh, tôi cũng muốn thêm:

Tôi không nghĩ rằng bạn cần phải hạn chế vị trí chính mình, các SortableListener sẽ:

// Set position to max position if it is too big 
$newPosition = min(array($this->maxPositions[$hash] + 1, $newPosition)); 

Vì vậy, chức năng moveUp() của bạn có thể là (btw bạn đã đảo ngược moveUpmoveDown?):

public function moveUp() 
{ 
    if ($this->position != 0) { 
     $this->position--; 
    } 
} 
public function moveDown() 
{ 
    $this->position++; 
} 

Cập nhật: Vâng sau khi một số thử nghiệm, nó quay ra có một lỗi trong tính năng đó.

setPosition(-1) sẽ đặt đối tượng ở cuối danh sách, nhưng nó tạo ra khoảng trống ở vị trí.

Tôi đã sao chép tại đây: https://github.com/l3pp4rd/DoctrineExtensions/pull/908

Tôi hy vọng nó sẽ được sửa.

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