Parece que está configurando una relación polimórfica, en cuyo caso, haría todo por separado, lo que significa que tendría un modelo para Cat, Dog, Turtle y PetData. Tendría controladores para CatController, DogController y TurtleController. Y tendría un formulario de gato, un formulario de perro y un formulario de tortuga, cada uno de los cuales también contiene entradas para los datos que necesita para su tabla pet_info.
Para crear la relación polimórfica, su tabla pet_data requerirá algunos cambios. Simplemente cambie la columna de la tabla a pet_type
. Laravel espera que un determinado nombre para esta columna y su contenido sea el nombre de un modelo en lugar del nombre de su tabla.
Configurar los modelos para estos es muy fácil, haré PetData y Dog para comenzar.
class Dog extends Eloquent
{
protected $table = 'dogs_data';
protected $timestamps = false;
public function petData()
{
return $this->morphMany('PetData', 'pet');
}
}
class PetData extends Eloquent
{
protected $timestamps = false;
public function pet()
{
return $this->morphTo();
}
}
Puede leer más sobre esto aquí... http://laravel.com/docs/eloquent# relaciones-polimórficas
La idea de tener modelos/controladores separados para todo puede parecer mucho trabajo, pero ayuda mucho cuando intentas mantener o agregar animales adicionales a tu aplicación porque rara vez deberías tener que modificar el código de producción, eliminando la posibilidad de introduciendo más errores al intentar agregar mejoras a su sitio web.
Ahora es muy fácil guardar una mascota y los datos de mascotas relacionados sin tener que preocuparse por pet_id y pet_type en la tabla pet_data, Laravel se encargará de eso por usted. La función en el controlador de tu perro podría verse así...
class DogController extends BaseController
{
public function save()
{
$dog = new Dog;
$dog->name = Input::get('name');
$dog->age = Input::get('age');
$dog->save();
$pet_data = new PetData;
$pet_data->color = Input::get('color');
$dog->petData()->save($pet_data);
}
}
En cuanto a crear otro controlador para administradores, diría que sí, hazlo. Nunca está de más mantener partes de tu sitio web que consideres diferentes en diferentes archivos. No solo ayuda con la organización, sino también con la separación de preocupaciones, sobre lo que probablemente debería leer más.
También hay algunas fantásticas opciones de terceros para administrar roles. He usado zizaco/entrust
antes y lo encontré muy fácil de manejar. Podría hacer su vida mucho más fácil al tratar de administrar quién puede hacer qué en su aplicación web.