Solución a la pregunta original
Llamaste estáticamente a un método no estático. Para hacer una función pública estática en el modelo, se vería así:
public static function {
}
En general:
Post::get()
En este caso particular:
Post::take(2)->get()
Una cosa con la que tener cuidado, al definir las relaciones y el alcance, con el que tuve un problema que causó un error de 'método no estático no debería llamarse estáticamente' es cuando tienen el mismo nombre, por ejemplo:
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
Cuando hago lo siguiente, obtengo el error no estático:
Event::category()->get();
El problema es que Laravel está usando mi método de relación llamado categoría, en lugar de mi alcance de categoría (scopeCategory). Esto se puede resolver cambiando el nombre del alcance o la relación. Elegí cambiar el nombre de la relación:
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
Tenga en cuenta que definí la clave externa (category_id) porque, de lo contrario, Laravel habría buscado cat_id en su lugar y no lo habría encontrado, ya que lo había definido como category_id en la base de datos.
$obj->getAll()
o haga que la función sea estática.