2017-04-06 240 views
1

我在搜索模型中創建日期範圍搜索時遇到此錯誤。Yii2日期範圍搜索

完整性約束衝突 - 警予\ DB \ IntegrityException

SQLSTATE [23000]:完整性約束衝突:在where子句是模糊的1052列 'created_at'

這裏是我的模型

public $start_date; 
    public $end_date; 
public function rules() 
     { 
      return [ 
       [['attachment', 'id_client', 'delete_on', 'created_at', 'created_by', 'updated_at', 'updated_by', 'from_location', 'to_location','printed_at', 'lock','verify','verify_by','approved','approved_by'], 'integer'], 
       [['policy_num'], 'autonumber', 'format'=>'formatPolicy'], 
       [['policy_num','premium_policy'], 'string'], 
       [['start_date','end_date'], 'date', 'format'=>'dd-MM-yyyy'],  
       [['from_location', 'to_location'], 'string', 'max' => 55], 
       [['location_address'], 'string', 'max' => 100], 
       [['attachment'], 'required'], 
       [['deductible'], 'string', 'max' => 100], 
       [['lock'], 'default', 'value' => '0'], 
       [['lock'], 'mootensai\components\OptimisticLockValidator'] 
      ]; 
     } 

這裏是我的搜索模型

public function rules() 
     { 
      return [ 
       [['id', 'policy_num', 'attachment', 'id_client', 'delete_on','created_by', 'updated_by', 'printed_at'], 'integer'], 
       [['cover_rate'], 'number'], 
       [['start_date','end_date','created_at','updated_at'], 'date','format'=>'yyyy-mm-dd'], 
      ]; 
     } 

     public function search2($params) 
      { 
       $query = AskPolicy::find(); 
       $query->joinWith(['client'])->where(['id_client'=>Yii::$app->user->identity->id_client]); 

       $dataProvider = new ActiveDataProvider([ 
        'query' => $query, 
       ]); 

       $this->load($params); 

      if (!$this->validate()) { 
       // uncomment the following line if you do not want to return any records when validation fails 
       // $query->where('0=1'); 
       return $dataProvider; 
      } 

      $query->andFilterWhere([ 
       'id' => $this->id, 
       'policy_num' => $this->policy_num, 
       'ask_policy.created_at' => $this->created_at, 
       'ask_policy.updated_at' => $this->updated_at, 
       'printed_at' => $this->printed_at, 
      ]); 

    //   $query->andFilterWhere(['>=', 'ask_policy.created_at', $this->start_date]); 
//   $query->andFilterWhere(['<=', 'ask_policy.created_at', $this->end_date]); 

      $query->andFilterWhere(['like',"(date_format(FROM_UNIXTIME(`created_at`), '%Y-%m-%d'))", $this->start_date]) 
      ->andFilterWhere(['like', "(date_format(FROM_UNIXTIME(`updated_at`), '%Y-%m-%d'))", $this->end_date]); 

      return $dataProvider; 
     } 

如果我使用下面的代碼:搜索開始日期和結束日期不工作

$query->andFilterWhere(['>=', 'ask_policy.created_at', $this->start_date]); 
$query->andFilterWhere(['<=', 'ask_policy.created_at', $this->end_date]); 

如何Yii2的最佳途徑整數轉換日期時間爲日期範圍搜索?我正在尋找,但沒有找到很好的解釋教程。

回答

0

您查詢加入了與client和兩個模型有created_at場。 可以爲當前模型設置別名與

$query->alias('t'); 

和別名加入表

$query->joinWith(['client as cli']); 

然後如果你想使用created_at從主模型,你可以使用t.created_at,如果你想使用created_at從加入模式您可以使用cli.created_at

0

你沒有給表的別名嘗試這樣

$query->andFilterWhere(['like',"(date_format(FROM_UNIXTIME(ask_policy.`created_at`), '%Y-%m-%d'))", $this->start_date]) 
->andFilterWhere(['like', "(date_format(FROM_UNIXTIME(ask_policy.`updated_at`), '%Y-%m-%d'))", $this->end_date]); 
+0

仍然無法正常工作 –

+0

錯誤是什麼? –

+0

沒有錯誤。搜索不起作用 –