Yii2 检查延迟加载是否已经完成
Yii2 check to see if lazy loading has been done already
所以我想知道,我想看看 table 是否已经 lazy/eager 加载,而不是在我检查时实际加载它。例如:
class Listing extends \yii\db\ActiveRecord {
public function getListingImages()
{
return $this->hasMany(ListingImage::className(), ['listing_id' => 'id'])->orderBy(['position' => SORT_ASC]);
}
public function getCoverImage()
{
if (isset($this->listingImages)) {
return $this->listingImages[0];
}
// Find cover image
}
}
所以当我做 isset($this->listingImages)
它总是 return true
因为如果它还没有加载它会去加载图像,但在这种情况下,那不是我想要做。这个例子是基本的,但我想做一些额外的过滤,所以我宁愿只做一个自定义 select。我怎样才能真正检查 eager/lazy 加载是否已经完成?
您可以使用 ActiveRecord class 的 isRelationPopulated() 方法。
所以我想知道,我想看看 table 是否已经 lazy/eager 加载,而不是在我检查时实际加载它。例如:
class Listing extends \yii\db\ActiveRecord {
public function getListingImages()
{
return $this->hasMany(ListingImage::className(), ['listing_id' => 'id'])->orderBy(['position' => SORT_ASC]);
}
public function getCoverImage()
{
if (isset($this->listingImages)) {
return $this->listingImages[0];
}
// Find cover image
}
}
所以当我做 isset($this->listingImages)
它总是 return true
因为如果它还没有加载它会去加载图像,但在这种情况下,那不是我想要做。这个例子是基本的,但我想做一些额外的过滤,所以我宁愿只做一个自定义 select。我怎样才能真正检查 eager/lazy 加载是否已经完成?
您可以使用 ActiveRecord class 的 isRelationPopulated() 方法。