まず、私の問題を説明します。
Job と JobCategory の 2 つのテーブルがあります。
job:
-------------------------------------------------
| id | category_job_id | job_name | keywords |
-------------------------------------------------
JobCategory:
-------------------------
| id | categoty_name |
-------------------------
2 つのテーブルは、外部キー「category_job_id」によって関連付けられています。
このアプリケーションでは、Propel ORM を使用しています。job_name と category_name の 3 つのフィールド キーワードを使用して検索したいと考えました。
最初のフィールドはキーワードで、キーワードを入力できる「input」、2 番目のフィールドは Category_name が「選択」、カテゴリのリストです。3 番目のフィールドは Job_name で、ジョブ名の「選択」リストです。空でない場合、キーワード フィールドは無視されます。
私はこのような検索機能を作っていますが、うまくいきません:
public function searchFilter($job,$category,$keyword)
{
$order = isset($this->order) ? $this->order : Criteria::ASC;
$job = '%' .$job. '%';
$category = '%' .$category. '%';
$c = new Criteria();
$c->addJoin(JobPeer::CATEGORY_JOB_ID, JobCategoryPeer::ID);
if((null !== $category) AND ($category !== ""))
{
$c->addOr(JobCategoryPeer::CATEGORY_NAME,$category, Criteria::LIKE);
}
if((null !== $job) AND ($job !== ""))
{
$c->addOr(JobPeer::JOB_NAME,$job, Criteria::LIKE);
}
$query = JobQuery::create(null, $c)
->joinWith('Job.JobCategory')
->orderByDateOfJob($order);
if((null !== $keyword) AND ($keyword !== "")){
$keyword = '%' .$keyword. '%';
$query->filterByKeywords($keyword, Criteria::LIKE);
}
$results = $query->find();
return $results;
}
しかし、検索はすべてのケースが間違っています!