2017-05-09 5 views
0

このコードをCakePHP 3に実装するにはどうすればよいですか?IF/AND/ORを組み合わせたCakePHP 3クエリ

function notEmpty($field) { 
    return isset($field) && $field != ''; 
} 

$conditions[] = notEmpty($group_id) ? "group_id LIKE %$group_id%" : ''; 
$conditions[] = notEmpty($token) ? "firstname LIKE %$token% OR lastname LIKE %$token% OR username LIKE %$token%" : ''; 
$conditions[] = notEmpty($parent_id) ? "parent_id LIKE %$parent_id%" : ''; 
$conditions[] = notEmpty($status) ? "status1 LIKE %$status% AND status2 LIKE %$status%" : ''; 

$conditions = array_filter($conditions , function($value) { return $value !== ''; });//Remove empty conditions 
array_walk($conditions, function(&$item) { $item = "($item)"; });//Add() to conditions 
$where = !empty($conditions) ? 'WHERE '.implode(' AND ', $conditions) : ''; 
$query = 'SELECT * FROM users '.$where; 

私は改ページを使用しています。

+1

それは、私がこれほど少ないコード(悪気)にaccross非常に多くの可能なSQLインジェクションの脆弱性を来て、長い時間がかかりました! ** _(ユーザー)データを直接クエリに追加することは絶対にありません** **カスタムSQLを作成するときにはいつも準備済みのクエリを使用してください!あなたは何を試しましたか? CakePHP 3 ORMについて何か知っていますか?そうでない場合は、最初にドキュメントを勉強することを強くお勧めします:** https://book.cakephp.org/3.0/en/orm/query-builder.html** | ** https://book.cakephp.org/3.0/en/controllers/components/pagination.html** – ndm

+0

これは、私がこのコードをphpでなくケーキで実装したいのです。私はこれを単純なコードで行うことができますが、私はどのように私は上記を行うことができますかわからない。複雑なコードなので:( –

答えて

1

これは非常に単純なコードです:)確かに複雑ではありません。あなたは、簡単にコントローラでpaginate()方法に$queryを渡すことができ

$conditions = []; 
if (!empty($group_id)) { 
    $conditions['group_id LIKE'] = '%' . $group_id . '%'; 
} 
if (!empty($token)) { 
    $conditions['or'] = [ 
    'firstname LIKE' => '%' . $token . '%', 
    'lastname LIKE' => '%' . $token . '%', 
    'username LIKE' => '%' . $token . '%', 
    ]; 
} 
if (!empty($parent_id)) { 
    $conditions['parent_id LIKE'] = '%' . $parent_id . '%'; 
} 
if (!empty($status)) { 
    $conditions['status1 LIKE'] = '%' . $status . '%'; 
    $conditions['status2 LIKE'] = '%' . $status . '%'; 
} 
$query = $this->Users->find()->where($conditions); 

最も単純で直接的な答えは(Usersテーブルを想定すると)以下のコードです。

より良い、より堅牢で保守性ソリューションを使用FriendsOfCake検索プラグインにあるhttps://github.com/friendsofcake/search

関連する問題