Làm cách nào để viết truy vấn trong CakePHP?

Tôi muốn viết truy vấn đó theo phương thức CakePHP

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                 'equipment' => '5164',
                 'main_systems_id' => '1'
               ),
              array(
                 'equipment' => 'TODOS',
                 'main_systems_id' => '<> 1'
               )
            )
       )
    ));
8. Tôi đã thử những cách sau nhưng kết quả không như mong đợi

$sys_content = $this->SystemTask->find('all', array(
     'conditions' => array('AND' => array(
           'eq_model' => 'D9 L',
           'pm_type' => 'H',
              'OR' => array(
                  'AND' => array(
                     'equipment' => '5164',
                     'main_systems_id' => '1'
                   ),
                  'AND' => array(
                     'equipment' => 'TODOS',
                     'main_systems_id' => '<> 1'
                   )
                )
           ))
        ));

Cảm ơn trước sự giúp đỡ của bạn

- stackoverflow. com

điểm. 1

câu trả lời được chấp nhận

Sử dụng điều kiện tiếp theo. Khi bạn viết các điều kiện, hãy lưu ý rằng bạn không thể có cùng một khóa hai lần trong hàm băm đơn (= mảng). Vì vậy, Thứ hai VÀ đã ghi đè lên điều kiện của bạn. Vì AND là mặc định, bạn có thể xóa nó như tôi đã làm trong mã bên dưới,

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                 'equipment' => '5164',
                 'main_systems_id' => '1'
               ),
              array(
                 'equipment' => 'TODOS',
                 'main_systems_id' => '<> 1'
               )
            )
       )
    ));

hoặc bọc khối bằng ['AND' =>. ] với mảng bổ sung()

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));

điểm. 0

thực sự bạn có thể sử dụng

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                 'equipment' => '5164',
                 'main_systems_id' => '1'
               ),
              array(
                 'equipment' => 'TODOS',
                 'main_systems_id' => '<> 1'
               )
            )
       )
    ));
9 cho mục đích đó. Ngay cả khi nó không được khuyến khích. Nhưng cách tốt nhất mà không cần đau đầu là chuyển đổi nó sang CakePHP

CakePHP-Searchable thêm một phương thức

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
0 tùy chỉnh vào các mô hình CakePHP của bạn, giảm bớt nhu cầu chuyển SQL thô vào các truy vấn của bạn. Nó an toàn trước SQL injection và sử dụng cú pháp truy vấn phù hợp với các quy ước ORM của CakePHP

Cài đặt

Cài đặt từ packagist bằng trình soạn nhạc. Thêm phần sau vào

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
1 của bạn

"require": {
    "chris48s/cakephp-searchable": "^2.0.0"
}

và chạy

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
2 hoặc
$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
3, nếu có

Hỗ trợ cơ sở dữ liệu

Để sử dụng các chỉ mục FULLTEXT trên các bảng InnoDB, bạn phải sử dụng MySQL >=5. 6. 4. Các phiên bản trước chỉ cho phép sử dụng các chỉ mục FULLTEXT trên các bảng MyISAM

Cách sử dụng

Đang tải plugin

Thêm mã

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
4 vào
$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
5 của bạn

Sử dụng hành vi

Thêm hành vi trong lớp bảng của bạn


namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}

Truy vấn dữ liệu

Đã thêm hành vi vào một lớp bảng, bây giờ bạn có quyền truy cập vào phương thức truy vấn

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
0, mà bạn có thể sử dụng để xây dựng các truy vấn MATCH() AGAINST(). Ví dụ



use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$query = $myTable
    ->find('matches', [
        [
            'match' => 'textcol1',
            'against' => 'foo'
        ],
        [
            'match' => 'textcol2, textcol3',
            'against' => '+foo bar*',
            'mode' => 'IN BOOLEAN MODE'
        ]
    ]);

chế độ có sẵn là

  • 
    namespace App\Model\Table;
    
    use Cake\ORM\Table;
    
    class MyTable extends Table
    {
    
        public function initialize(array $config)
        {
            parent::initialize($config);
            $this->addBehavior('Chris48s/Searchable.Searchable');
        }
    }
    0
  • 
    namespace App\Model\Table;
    
    use Cake\ORM\Table;
    
    class MyTable extends Table
    {
    
        public function initialize(array $config)
        {
            parent::initialize($config);
            $this->addBehavior('Chris48s/Searchable.Searchable');
        }
    }
    1
  • 
    namespace App\Model\Table;
    
    use Cake\ORM\Table;
    
    class MyTable extends Table
    {
    
        public function initialize(array $config)
        {
            parent::initialize($config);
            $this->addBehavior('Chris48s/Searchable.Searchable');
        }
    }
    2
  • 
    namespace App\Model\Table;
    
    use Cake\ORM\Table;
    
    class MyTable extends Table
    {
    
        public function initialize(array $config)
        {
            parent::initialize($config);
            $this->addBehavior('Chris48s/Searchable.Searchable');
        }
    }
    3

Khi sử dụng chế độ boolean, một số toán tử bổ sung có sẵn

Phương thức

$sys_content = $this->SystemTask->find('all', array(
 'conditions' => array('AND' => array(
       'eq_model' => 'D9 L',
       'pm_type' => 'H',
          'OR' => array(
              array(
                'AND' => array(
                   'equipment' => '5164',
                   'main_systems_id' => '1'
                )),
              array(
                'AND' => array(
                   'equipment' => 'TODOS',
                   'main_systems_id' => '<> 1'
               ))
            )
       ))
    ));
0 trả về một đối tượng truy vấn CakePHP, vì vậy bạn có thể xâu chuỗi các phương thức bổ sung vào đối tượng này (e. g.

namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}
5,

namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}
6,

namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}
7, v.v.)

Xử lý lỗi

Nếu khóa


namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}
8 hoặc

namespace App\Model\Table;

use Cake\ORM\Table;

class MyTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);
        $this->addBehavior('Chris48s/Searchable.Searchable');
    }
}
9 không được đặt hoặc nếu bất kỳ cột nào trong danh sách cột không thuộc loại


use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$query = $myTable
    ->find('matches', [
        [
            'match' => 'textcol1',
            'against' => 'foo'
        ],
        [
            'match' => 'textcol2, textcol3',
            'against' => '+foo bar*',
            'mode' => 'IN BOOLEAN MODE'
        ]
    ]);
0 hoặc


use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$query = $myTable
    ->find('matches', [
        [
            'match' => 'textcol1',
            'against' => 'foo'
        ],
        [
            'match' => 'textcol2, textcol3',
            'against' => '+foo bar*',
            'mode' => 'IN BOOLEAN MODE'
        ]
    ]);
1, thì một ngoại lệ của lớp


use Cake\ORM\TableRegistry;

$myTable = TableRegistry::get('MyTable');

$query = $myTable
    ->find('matches', [
        [
            'match' => 'textcol1',
            'against' => 'foo'
        ],
        [
            'match' => 'textcol2, textcol3',
            'against' => '+foo bar*',
            'mode' => 'IN BOOLEAN MODE'
        ]
    ]);
2 sẽ bị ném

Vấn đề báo cáo

Nếu bạn gặp bất kỳ sự cố nào với plugin này, vui lòng tạo Sự cố mới trên kho lưu trữ GitHub. Plugin này được cấp phép theo Giấy phép MIT

Làm cách nào tôi có thể nhận truy vấn SQL trong cakephp?

$log = $this->User->getDataSource()->getLog(false, false); . $db =& Trình quản lý kết nối. getDataSource('mặc định'); . This will show a log of all queries: $db =& ConnectionManager::getDataSource('default'); $db->showLog(); If you want to show all queries log all over the application you can use in view/element/filename.

Làm cách nào để viết truy vấn tìm kiếm trong PHP?

php $query = $_GET['query']; // nhận giá trị được gửi qua biểu mẫu tìm kiếm $min_length = 3; .

Làm thế nào để viết một truy vấn SQL?

Cách tạo câu lệnh SQL .
Bắt đầu truy vấn của bạn với câu lệnh chọn. chọn tất cả. riêng biệt].
Thêm tên trường bạn muốn hiển thị. trường1 [, trường2, 3, 4, v.v. ].
Thêm (các) mệnh đề tuyên bố của bạn hoặc tiêu chí lựa chọn. Yêu cầu. .
Xem lại tuyên bố lựa chọn của bạn. Đây là một tuyên bố mẫu

Làm cách nào tôi có thể nhận truy vấn cuối cùng trong cakephp?

$last_query = $ this ->ModelName->getLastQuery(); Vì chúng tôi đã lưu truy vấn được thực hiện lần cuối trong biến $last_query nên hãy sử dụng truy vấn này để in truy vấn được thực hiện lần cuối.