Изглежда, че създавате полиморфна връзка, в който случай бих направил всичко отделно, което означава, че ще имате модел за Cat, Dog, Turtle и PetData. Ще имате контролери за CatController, DogController и TurtleController. И ще имате формуляр за котка, формуляр за куче и формуляр за костенурка, всяка от които също съдържа входове за данните, които изисквате за вашата таблица pet_info.
За да създадете полиморфна връзка, вашата таблица pet_data ще изисква някои промени. Просто променете колоната на таблицата на pet_type
. Laravel очаква определено име за тази колона и нейното съдържание да бъде името на модел, а не името на вашата таблица.
Настройването на моделите за тях е много лесно, ще направя PetData и Dog, за да започна.
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();
}
}
Можете да прочетете повече за това тук... http://laravel.com/docs/eloquent# полиморфни-отношения
Идеята да имате отделни модели/контролери за всичко може да изглежда като много работа, но върши дълъг път, когато се опитвате да поддържате или добавяте допълнителни животни към приложението си, защото рядко трябва да променяте производствения код, отнемайки възможността за въвеждане на повече грешки, когато се опитвате да добавите подобрения към уебсайта си.
Сега става много лесно да запазите домашен любимец и свързаните с него данни, без да се налага да се притеснявате за pet_id и pet_type в таблицата pet_data, Laravel ще се погрижи за това вместо вас. Функцията на вашия контролер за кучета може да изглежда така...
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);
}
}
Що се отнася до създаването на друг контролер за администратори, бих казал да, направете го. Никога не пречи да запазите части от уебсайта си, които смятате за различни, в различни файлове. Това не само помага с организацията, но отново, с разделянето на грижите, за което вероятно трябва да прочетете повече.
Има и някои фантастични опции на трети страни за управление на роли. Използвах zizaco/entrust
преди и открих, че е много лесен за управление. Това може да направи живота ви много по-лесен, когато се опитвате да управлявате кой какво може да прави във вашето уеб приложение.