1

first_name と last_name を連結した full_name に基づいて検索しようとしていますが、エラーが発生し続けます。

これは私のコントローラーがどのように見えるかです:

$criteria = new CDbCriteria;
$criteria->addSearchCondition('full_name',$customer_search);
$customers = Customer::model()->findAll($criteria);

私の Customer モデルには、full_name を返すメソッドがあります。

public function getFull_name() {
  return $this->first_name.' '.$this->last_name;
}

しかし、私はこのエラーが発生します:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'full_name' in 'where clause'. The SQL statement executed was: SELECT * FROM `customer` `t` WHERE full_name LIKE :ycp0

first_name と last_name の両方を検索できるようにする必要があります。これを機能させるには何を変更する必要がありますか?

4

1 に答える 1

1

クエリで「計算された」列を使用することはできません。データベースに物理的に存在する列のみをチェックするように、基準を書き直す必要があります。

名または名前の一部が一致する人を見つけたいので、検索語をパーセント記号で囲み(MySqlのドキュメントを参照)、2番目の条件を次のように指定する必要があります。LIKEOR

$criteria = new CDbCriteria;
$criteria->addSearchCondition('first_name', $customer_search);
$criteria->addSearchCondition('last_name', $customer_search, true, "OR");
$customers = Customer::model()->findAll($criteria);
于 2012-09-14T20:20:14.970 に答える