Parece que você está configurando uma relação polimórfica, nesse caso, eu faria tudo separado, o que significa que você teria um modelo para Cat, Dog, Turtle e PetData. Você teria controladores para CatController, DogController e TurtleController. E você teria um formulário Cat, um formulário Dog e um formulário Turtle, cada um que também contém entradas para os dados necessários para sua tabela pet_info.
Para criar a relação polimórfica, sua tabela pet_data exigirá algumas alterações. Basta alterar a coluna da tabela para
pet_type
. O Laravel espera que um determinado nome para esta coluna e seu conteúdo seja o nome de um modelo ao invés do nome de sua tabela. Configurar os modelos para estes é muito fácil, vou fazer o PetData e o Dog para começar.
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();
}
}
Pode ler mais sobre isso aqui... http://laravel.com/docs/eloquent# relações polimórficas
A ideia de ter modelos/controladores separados para tudo pode parecer muito trabalhoso, mas ajuda bastante ao tentar manter ou adicionar animais adicionais ao seu aplicativo, porque você raramente precisa modificar o código de produção, tirando a possibilidade de introduzindo mais bugs ao tentar adicionar melhorias ao seu site.
Agora ficou muito fácil salvar um pet e dados de pet relacionados sem ter que se preocupar com pet_id e pet_type na tabela pet_data, o Laravel cuidará disso para você. A função no controlador do seu cão pode ser assim...
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);
}
}
Quanto a criar outro controlador para administradores, eu diria que sim, faça isso. Nunca é demais manter partes do seu site que você considera diferentes em arquivos diferentes. Isso não apenas ajuda na organização, mas também na separação de interesses, sobre os quais você provavelmente deveria ler mais.
Existem também algumas opções fantásticas de terceiros para gerenciar funções. Eu usei
zizaco/entrust
antes e achei muito fácil de gerenciar. Isso pode tornar sua vida muito mais fácil ao tentar gerenciar quem pode fazer o quê em seu aplicativo da web.