2015-04-27 17 views
7

Tôi có hai mô hình Người dùng & Vai tròCakePHP 3.x Phân loại mô hình khác không hoạt động

Here "Vai trò Người dùng hasMany" và "Người dùng belongsTo Vai trò"

Khi người dùng lưu chúng tôi cũng hỏi vai trò của người dùng & bản ghi đã lưu.

Sự cố: Tôi có danh sách người dùng có tên, họ, vai trò cột. Mỗi & Mỗi cột có phân loại nhưng trên phân loại vai trò không hoạt động.

Bảng vai trò chứa trường "tên" cho tên Vai trò. Tôi đã giới thiệu bên dưới liên kết nhưng nó không hoạt động cho tôi. Pagination Sort in Cakephp 3.x

UsersController:

public function index() { 
    $this->paginate = [ 
       'contain' => ['Roles'], 
       'conditions' => [ 
        'Users.user_type <>' => 1 
       ] 
      ]; 

      $this->set('users', $this->paginate($this->Users)); 
      $this->set('_serialize', ['users']); 
} 

index.ctp

<tr> 
       <th><?php echo $this->Paginator->sort('firstname',__('First Name')) ?></th> 
       <th><?php echo $this->Paginator->sort('lastname',__('Last Name')) ?></th> 
       <th><?php echo $this->Paginator->sort('email',__('Email Address')) ?></th> 
       <th><?php echo $this->Paginator->sort('Roles.name',__('Role Associated')) ?></th> 
       <th><?php echo $this->Paginator->sort('status',__('status')) ?></th> 
       <th class="actions"><?php echo __('action') ?></th> 
      </tr> 

Hãy cho tôi biết bất kỳ giải pháp mà bạn có.

+0

Bạn đã tìm thấy một giải pháp? – user2340939

Trả lời

1

UsersController.php

$this->paginate = [ 
      'contain' => ['Roles'], 
      'conditions' => [ 
       'Users.user_type <>' => 1 
      ], 
      'order' => ['Users.role_id' => 'ASC'] 
     ]; 

Sử dụng 'trật tự' => [ 'Models.field' => 'ASC/DESC']

+0

Cảm ơn bạn đã trả lời nhưng tôi muốn sắp xếp. Sắp xếp trên trường "Vai trò được liên kết" bằng cách nhấp vào. –

+0

Hãy thử sử dụng phím 'sắp xếp' trên bạn chứa: http://book.cakephp.org/3.0/en/orm/query-builder.html#sorting-contained-associations –

-1

(Tôi sẽ thêm một comment cho bạn chất vấn nhưng Tôi không có đủ điểm danh tiếng.)

Tôi gặp vấn đề tương tự.

Điều này đang xảy ra do cách hoạt động của hành vi có thể chứa. Khi CakePHP nhận tất cả vai trò của một người dùng được liên kết, nó sẽ đưa ra một truy vấn riêng biệt (thay vì sử dụng một phép nối trên truy vấn chính). Sau đó, nó đặt tất cả cùng nhau trong một đối tượng tốt đẹp để sử dụng. Hãy xem sql trong bộ gỡ lỗi.

Khi bạn yêu cầu nó sắp xếp theo tên vai trò, không thể vì không thể tìm thấy vai trò bảng trong truy vấn chính. Tôi đoán bạn nhận được một lỗi như thế này:

Error: SQLSTATE[HY000]: General error: 1 no such column: Roles.name

Để thực hiện tác phẩm này, bạn sẽ phải tìm ra cách để tham gia vào bảng Roles vào bảng Users trong truy vấn chính của việc này để công việc. Đây cũng là lý do tại sao nó hoạt động theo cách khác. Nếu bảng Users thuộc về bảng Roles bạn sẽ không gặp vấn đề này bởi vì bảng Roles sẽ được kết hợp trong truy vấn chính.

Một cách khác để làm cho nó hoạt động có thể là sử dụng mô hình Vai trò cho truy vấn chính. Nhưng nếu bảng của người dùng của bạn có các liên kết hasMany khác mà bạn muốn sắp xếp theo, điều này sẽ không hoạt động. (Đây là trường hợp của tôi.)

Tôi vừa mới bắt đầu tham gia CakePHP 3, vì vậy tôi thực sự không có câu trả lời cụ thể vào thời điểm này, nhưng tôi hy vọng điều này hướng bạn đi đúng hướng.

18

Bạn chỉ cần sử dụng này:

$this->paginate = [ 
    'sortWhitelist'=>['Roles.name'] 
]; 
+3

Để chính xác hơn một chút: bạn cũng có để bao gồm tất cả các cột khác mà bạn muốn sắp xếp. Trong Bộ điều khiển-Hành động 'mã $ this-> paginate = [ ' contains '=> [' Roles '], ' sortWhitelist '=> [' Roles.name ',' firstname ',' lastname ',' email ',' status '] ]; ' [liên kết] (http://book.cakephp.org/3.0/en/controllers/components/pagination.html#control-which-fields-used-for-ordering) – Tobse

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