Llamada a una relación indefinida en el modelo laravel usando el alcance
Estoy tratando de obtener 5 publicaciones para cada categoría, así que hice una pequeña búsqueda y terminé aquí Obtener n Publicaciones por categoría Pero recibo una llamada extraña a una relación indefinida en el modelo cuando lo uso con alcance, pero todo funciona bien si no uso un alcance. Aquí está el modelo de categoría
//Relationship with posts
public function posts(){
return $this->hasMany('App\Post');
}
ámbito por grupo
public function scopeNPerGroup($query, $group, $n = 10)
{
// queried table
$table = ($this->getTable());
// initialize MySQL variables inline
$query->from( \DB::raw("(SELECT @rank:=0, @group:=0) as vars, {$table}") );
// if no columns already selected, let's select *
if ( ! $query->getQuery()->columns)
{
$query->select("{$table}.*");
}
// make sure column aliases are unique
$groupAlias = 'group_'.md5(time());
$rankAlias = 'rank_'.md5(time());
// apply mysql variables
$query->addSelect(\DB::raw(
"@rank := IF(@group = {$group}, @rank+1, 1) as {$rankAlias}, @group := {$group} as {$groupAlias}"
));
// make sure first order clause is the group order
$query->getQuery()->orders = (array) $query->getQuery()->orders;
array_unshift($query->getQuery()->orders, ['column' => $group, 'direction' => 'asc']);
// prepare subquery
$subQuery = $query->toSql();
// prepare new main base Query\Builder
$newBase = $this->newQuery()
->from(\DB::raw("({$subQuery}) as {$table}"))
->mergeBindings($query->getQuery())
->where($rankAlias, '<=', $n)
->getQuery();
// replace underlying builder to get rid of previous clauses
$query->setQuery($newBase);
}
Llamando a Npergroup con relación
public function latestposts()
{
return $this->posts()->latest()->nPerGroup('category_id', 5);
}
Relación de modelo de publicación
//Post belongs to Category
public function category(){
return $this->belongsTo('App\Category');
}
En mi controlador de categorías estoy llamando a latestposts
a través de
$categories = Category::with('latestposts')->get();
Pero recibo el error: Call to undefined relationship on model
Lo que quiero es: Obtenga el número N de publicaciones por cada categoría, pero estoy completamente perdido en este punto. Cualquier ayuda sería apreciada
Referencia: Tweaking relaciones Eloquent: cómo obtener ¿N modelos relacionados por padre?
Mostrar la mejor respuesta