使用Laravel和Eloquent,通过父表获取最近的值

a9wyjsp7  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(106)

使用Laravel和雄辩的ORM -是否有一种方法可以从模型内部执行以下操作:
我有一张收款台。它有一个collection_type属性。如果我从collections模型中选择一行,我还需要从对应于collection_type值的表中选择10条最近的记录。因此,如果值为post,则它将从posts表中选择10条最近的记录。
我认为集合模型中的以下方法可以工作:

public function most_recent(){
    $collection_type_class = Relation::getMorphedModel($this->collection_type);
    return $collection_type_class::orderBy("id", "DESC")->take(10)->get();
  }
  protected $with = ['most_recent'];

如果有帮助,结构可能看起来有点像这样:

collections:{'id','collection_type'} //collection_type=['post'||'page'||'testimonial']

posts:{'id','title','snippet','post'...etc },
pages:{'id','title','meta'...etc },
testimonials:{'id','name','testimonial'...etc }
hmmo2u0o

hmmo2u0o1#

我已经想明白了。问题是$this->collection_type在使用with时没有值,我需要像这样使用访问器:

// APPENDS - ADDS A PROPERTY TO A MODEL
protected $appends = ['collection'];

// ACCESSOR FORMAT getXyzAttribute
// ACCESSOR - USED IN LARAVEL TO MODIFY A VALUE WHEN THEY ARE ACCESSED - WHICH IN MY CASE ALLOWS ME TO GET THE OTHER ROWS BASED ON THE COLLECTION_TYPE
// WHEN USING THE ACCESSOR the collection_type HAS ACTUALY GOT A VALUE
public function getCollectionAttribute()
{
    $relatedModel = Relation::morphMap()[$this->collection_type];
    return $relatedModel::orderBy('created_at', 'desc')->limit(10)->get();                
}

相关问题