php - traer - obtener datos de tablas relacionadas laravel
Laravel obtener el nombre de clase del modelo relacionado (2)
Creo que no puedes hacer eso. No sé para qué lo necesita, pero simplemente podría agregar un método adicional donde coloque todos los nombres de clase de sus relaciones y devuelva el que desee:
public function getRelationsClassName($relation) {
$relations = [
''products'' => ''Product'',
''users'' => ''User'',
]
return isset($relations[$relation]) ? $relations[$relation] : null;
}
En mi aplicación Laravel tengo un modelo de Faq
. Un modelo de Faq
puede contener muchos modelos de Product
, por lo que la clase de Faq
contiene la siguiente función:
class Faq extends Eloquent{
public function products(){
return $this->belongsToMany(''Product'');
}
}
En un controlador, me gustaría poder recuperar el nombre de la clase que define la relación. Por ejemplo, si tengo un objeto Faq
, como este:
$faq = new Faq();
¿Cómo puedo determinar el nombre de clase de la relación, que en este caso sería Product
? Actualmente puedo hacerlo así:
$className = get_class($faq->products()->get()->first());
Sin embargo, me pregunto si hay una manera de lograr esto mismo sin tener que ejecutar una consulta.
Sí, hay una manera de obtener un modelo relacionado sin consulta:
$className = get_class($faq->products()->getRelated());
Funcionará para todas las relaciones.
Esto devolverá el nombre completo con espacio de nombres. En caso de que quiera usar solo el nombre base:
// laravel helper:
$baseClass = class_basename($className);
// generic solution
$reflection = new ReflectionClass($className);
$reflection->getShortName();