お世話になります。
cakephp3系において複雑条件でのfindをしようと思っているのですが、
うまくいかずに質問させていただきました。
内容としては以下になります。
・FriendsOfCakeプラグインを使用
・アソシエーション先のstatusが1の要素が3個以下
という条件になります。
association先を条件に含めるのはよく見るのですが、friendsofcakeを使用しているというのと、アソシエーション先の条件に合致する個数を元にfindするというのが分からずに質問させていただきました。
ソースは以下になります。
Controller
PHP
1$query = $this->Users->find('search', [ 2 'search' => $this->request->query, 3 'contain' => ['Labels'], 4 'conditions' => [ 5 'Labels' => function($query){ 6 return $query->where([ 7 'status' => 1 8 ]); 9 } 10 ] 11]);
追記
具体的には以下のコードを一度のクエリで実現をしたいです。
理由はpaginateコンポーネントが使用出来ないからです。
もしく$job_listをオブジェクトに変換してpaginateが使えるようでしたらその方法でも大丈夫です。
PHP
1$query = $this->Jobs->find('search', [ 2 'search' => $this->request->query, 3 'contain' => ['Assigns'], 4 'conditions' => [ 5 'Jobs.date >=' => date("Y-m-d H:i:s", time()), 6 'Jobs.disabled' => 0 7 ] 8]); 9 10$jobs = []; 11foreach ($query as $i => $job) { 12 // jobのmax = assign数の場合は除外 13 $num = $job->get_assign_num($job->id); 14 if ($job->num <= $num) continue; 15 16 // 自身がassign済みのjobは除外 17 $res = $this->Jobs->check_my_assign($job->id, $this->Auth->user('id')); 18 if (!$res) continue; 19 20 $jobs[$i] = $job; 21 22} 23 24$job_list = $this->paginate($query);
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。