- ActiveForm表單提交后,通過網(wǎng)頁中Network可知表單數(shù)據(jù)已經(jīng)向控制器提交。但是,控制器中卻接受不到數(shù)據(jù)。
我遇到這個問題的原因是:在表單模型的類文件中沒有給表單的屬性設(shè)置規(guī)則,就是沒有使用rules()方法對屬性設(shè)置規(guī)則。以我遇到的問題為例:
public function rules()
{
return [
[['id', 'name', 'code', 'type'], 'required'],
]
}
只需要簡單的這樣寫就可以在控制器中獲取到表單數(shù)據(jù)了。經(jīng)過測試,在該方法中注釋掉的屬性都無法穿到控制器中。
2.在ActiveForm表單中使用dropDownList,比如下面的代碼:
類型:<?php echo $form->field($model, 'type')->dropDownList($class::$type,['prompt'=>'請選擇', 'style' => 'with:120px', 'class' => 'form-control']) ?>
在頁面中顯示幾條帶選的選項,如果選擇 '請選擇' 這個選項,后項后臺傳入:
'' //空,并不是null
如果選擇其他的選項,這傳入的是每個選項對應(yīng)的key,并使選項本身的value,這里是:
0 //第一個選項
1 //第二個選項
//...
- 數(shù)據(jù)庫在 連表查詢 的時候,報如下錯誤:
Exception (Integrite constraint violation) 'yii\db\IntegrityException' with
message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column
'question_id' in where clause is ambiguous.
The SQL being executed was: SELECT COUNT(*) FROM `answer` LEFT JOIN `question` `q` ON `answer`.question_id = q.question WHERE `question_id` = '10''
這句話的主要意思是說,在 WHERE 子句中的 'question_id' 是模棱兩可的。
為什么會產(chǎn)生這樣的報錯信息呢?因為在這兩張表中均有 'question_id'字段,產(chǎn)生這樣的錯誤是因為傳給 SQL 語句的中,即 WHERE 子句中的 'question_id' 沒有指明是哪個表中的,從而導(dǎo)致不知道去哪一張表中查詢。
解決思路:給傳入的字段 'question_id' 加上標(biāo)識,區(qū)分是哪個表中的。
解決辦法: 其實在Yii中已經(jīng)封裝了解決的辦法。在 AnswerSearch.php 和 QuestionSearch.php 兩個搜索模型的查詢語句中加入
$query->andFilterWhere([
Answer::tableName(). '.question_id' => $this->question_id
]);
$query->andFilterWhere([
Question::tableName(). '.question_id' => $this->question_id
]);
即可區(qū)分兩個表(模型)中的字段。