2017-09-05 11 views
0

私は、店舗の購買記録に関するデータを含むTPurchasingというテーブルを持っています。YIi2 - searchModelの2つのフィールドを比較する

TPurchasing

  • ID |シリアル
  • transaction_time |タイムゾーンのないタイムスタンプ
  • サプライヤ|文字を変える(200)
  • 合計|倍精度
  • お支払い|倍精度

yii2でgii機能を使用すると、「CRUDジェネレータ」メニューからTPurchasingSearchというモデルを生成できます。 TPurchasingSearchには、viewファイル内のGridViewによって使用されるsearch()という関数があります。

public function search($params) 
{ 
    $query = TPurchasing::find(); 
    $dataProvider = new ActiveDataProvider([ 
     'pagination' => ['pageSize' => 20], 
     'query' => $query, 
     'sort' => ['defaultOrder' => ['transaction_time' => SORT_DESC]] 
    ]); 

    $this->load($params); 

    if (!$this->validate()) { 
     $query->where('0=1'); 
     return $dataProvider; 
    } 

    $query->andFilterWhere(['is_removed' => 0]); 
    $query->andFilterWhere(['like', 'supplier_name', $this->supplier_name]) 
     ->andFilterWhere(['like', 'payment_type', $this->payment_type]) 
     ->andFilterWhere(['>', 'total', 'paid']); 

    return $dataProvider; 
} 

は、今のところ私はまだ完全に「有給」の欄には「合計」欄より小さいことを意味する、完済されていないレコードを表示しようとしています。検索機能でどのようにこの比較を行うことができますか?それは「支払った」文字列で合計列を比較してみましたので、この部分に

invalid input syntax for type double precision: "paid" 

->andFilterWhere(['>', 'total', 'paid']); 

:上記のコードは私にエラーを与えました。私はそれを逃したかもしれませんが、私はYii2のドキュメントで関連する答えを見つけることができないようです。

答えて

2

ここandFilterWhere()を使用する必要はありません、あなたは単に試みることができる:

$query->andWhere('total > paid'); 
+0

それはトリックを行います!それは簡単ではないと思った。ありがとう! – Switch88

関連する問題