Wygląda na to, że konfigurujesz relację polimorficzną, w którym to przypadku rozdzieliłbym wszystko, co oznacza, że masz model dla Cat, Dog, Turtle i PetData. Miałbyś kontrolery dla CatController, DogController i TurtleController. I będziesz miał formularz Kot, Formularz Psa i Formularz Żółwia, z których każda zawiera również dane wejściowe dla danych wymaganych w tabeli pet_info.
Aby stworzyć relację polimorficzną, twoja tabela pet_data będzie wymagała pewnych zmian. Po prostu zmień kolumnę tabeli na pet_type
. Laravel oczekuje określonej nazwy dla tej kolumny i jej zawartości, która będzie nazwą modelu, a nie nazwą Twojej tabeli.
Konfiguracja modeli dla nich jest bardzo łatwa, na początek zajmę się PetData i Dogiem.
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();
}
}
Więcej na ten temat można przeczytać tutaj... http://laravel.com/docs/eloquent# relacje-polimorficzne
Pomysł posiadania osobnych modeli/kontrolerów do wszystkiego może wydawać się bardzo pracochłonny, ale przy próbie utrzymania lub dodania dodatkowych zwierząt do aplikacji jest to długa droga, ponieważ rzadko trzeba modyfikować kod produkcyjny, co eliminuje możliwość wprowadzenie większej liczby błędów podczas próby dodania ulepszeń do Twojej witryny.
Teraz bardzo łatwo jest zapisywać dane zwierzaka i powiązane z nim dane bez martwienia się o pet_id i pet_type w tabeli pet_data, Laravel zajmie się tym za Ciebie. Funkcja kontrolera psa może wyglądać tak...
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);
}
}
Jeśli chodzi o tworzenie kolejnego kontrolera dla administratorów, powiedziałbym tak, zrób to. Nigdy nie zaszkodzi przechowywać części witryny, które uważasz za różne, w różnych plikach. Pomaga nie tylko w organizacji, ale znowu w rozdzieleniu obaw, o których prawdopodobnie powinieneś przeczytać więcej.
Istnieją również fantastyczne opcje zarządzania rolami innych firm. Użyłem zizaco/entrust
wcześniej i okazało się, że jest to bardzo łatwe w zarządzaniu. To może znacznie ułatwić Ci życie, gdy próbujesz zarządzać tym, kto może robić co w Twojej aplikacji internetowej.