$model->save()->rawSql
la chiamata non può restituire null
, deve generare un'eccezione per cui si sta tentando di accedere alla proprietà di non oggetto. $model->save()
restituisce il valore boolean
- query eseguita correttamente o meno.
Se $model->getErrors()
rendimenti array vuoto e interrogazione non è stato eseguito a tutti sono abbastanza sicuro che qualcosa non va con i gestori di eventi, in particolare il modello beforeSave()
, verificarle, non dovrebbe return false
. Controlla anche i gestori di eventi associati ai comportamenti.
Come per ottenere query. È inutile se semplicemente non è stato eseguito, ma se lo fosse, ecco alcuni modi per ottenerlo:
1) Probabilmente il modo migliore. Usa il pannello di debug. L'ho anche menzionato here.
2) Controllare i registri come @robsch consigliato.
Non è possibile ottenere direttamente codice SQL in codice con $model->save()
, Verrà chiamato insert()
o update()
. Se siete interessati, qui è la parte di codice per insertInternal()
:
$values = $this->getDirtyAttributes($attributes);
if (empty($values)) {
foreach ($this->getPrimaryKey(true) as $key => $value) {
$values[$key] = $value;
}
}
$db = static::getDb();
$command = $db->createCommand()->insert($this->tableName(), $values);
if (!$command->execute()) {
return false;
}
Se si chiama $command->rawSql
otterrete SQL prime, ma non si può fare al di fuori perché il comando si forma internamente.
P.S. questo pezzo di codice:
if ($model->validate()) {
$model->save();
}
non ha senso, perché $model->save()
chiamerà $model->validate()
internamente.
È possibile cercare in runtime/logs/app.log se si è in modalità di debug. Anche le query vengono registrate. – robsch