我在我的一个模型中重载了afterFind()函数:
public function afterFind()
{
parent::afterFind();
echo "<PRE>";
echo var_dump($this);
echo "</PRE>";
die();
}
如果查询结果不为空,我会收到转储。
但是,如果执行的查询没有返回结果,则不会调用此方法。
我需要调用它,特别是在没有发现任何结果试图通过不同的源加载请求的数据的情况下。
我怎样才能实现这个目标?
[编辑]
通过以下方式调用查找:
return $this->hasOne(Myclass::className(), ['id' => 'key_id']);
因为hasOne(...)使用
public function hasOne($class, $link)
{
/* @var $class ActiveRecordInterface */
/* @var $query ActiveQuery */
$query = $class::find();
$query->primaryModel = $this;
$query->link = $link;
$query->multiple = false;
return $query;
}
答案 0 :(得分:1)
:: find()方法来自ActiveRecord类并创建您的ActiveQuery对象
- &gt; afterFind()方法来自ActiveQuery类/对象,但只有在查询返回非空结果的情况下才会触发
如果您需要执行某些操作,无论查询是否返回结果,您都可以:
$ query = $ this-&gt; hasOne(Myclass :: className(),[&#39; id&#39; =&gt;&#39; key_id&#39;]);
//在这里做你的东西......
返回$ query;
命名空间app \ components;
类MyActiveRecord extends \ yii \ db \ ActiveRecord {
public function __get($name) { if (isset($this->_attributes[$name]) || array_key_exists($name, $this->_attributes)) { return $this->_attributes[$name]; } elseif ($this->hasAttribute($name)) { return null; } else { if (isset($this->_related[$name]) || array_key_exists($name, $this->_related)) { return $this->_related[$name]; } $value = parent::__get($name); if ($value instanceof ActiveQueryInterface) { $result = $this->_related[$name] = $value->findFor($name, $this); // Do your stuff here. return $result; } else { return $value; } } } }