Det ser ut som att du skapar en polymorf relation, i så fall skulle jag göra allt separat, vilket innebär att du skulle ha en modell för Cat, Dog, Turtle och PetData. Du skulle ha kontroller för CatController, DogController och TurtleController. Och du skulle ha ett kattformulär, ett hundformulär och ett sköldpaddaformulär, var och en som också innehåller indata för de data du behöver för din pet_info-tabell.
För att skapa den polymorfa relationen kommer din pet_data-tabell att kräva några ändringar. Ändra bara tabellkolumnen till pet_type
. Laravel förväntar sig ett visst namn för denna kolumn och att dess innehåll ska vara namnet på en modell snarare än namnet på din tabell.
Att ställa in modellerna för dessa är väldigt enkelt, jag kommer att göra PetData och Dog för att komma igång.
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();
}
}
Kan läsa mer om detta här... http://laravel.com/docs/eloquent# polymorfa relationer
Tanken på att ha separata modeller/kontroller för allt kan tyckas vara mycket jobb, men det går långt när man försöker underhålla eller lägga till ytterligare djur i din app eftersom du sällan behöver ändra produktionskoden, vilket tar bort möjligheten att introducerar fler buggar när du försöker lägga till förbättringar på din webbplats.
Nu blir det väldigt enkelt att spara ett husdjur och relaterade husdjursdata utan att behöva oroa sig för pet_id och pet_type i pet_data-tabellen, Laravel tar hand om det åt dig. Funktionen på din hundkontroll kan se ut så här...
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);
}
}
När det gäller att skapa en annan kontroller för administratörer, skulle jag säga ja, gör det. Det skadar aldrig att behålla delar av din webbplats som du anser vara olika i olika filer. Det hjälper inte bara med organisation, utan återigen, med separation av bekymmer, som du förmodligen borde läsa mer om.
Det finns också några fantastiska alternativ från tredje part för att hantera roller. Jag har använt zizaco/entrust
tidigare och fann det mycket lätt att hantera. Det kan göra ditt liv mycket enklare när du försöker hantera vem som kan göra vad i din webbapp.