Het lijkt erop dat je een polymorfe relatie aan het opzetten bent, in welk geval ik alles apart zou maken, wat betekent dat je een model zou hebben voor Cat, Dog, Turtle en PetData. Je zou controllers hebben voor CatController, DogController en TurtleController. En je zou een formulier Kat, een formulier Honden en een formulier Schildpad hebben, die elk ook invoer bevatten voor de gegevens die je nodig hebt voor je pet_info-tabel.
Om de polymorfe relatie te creëren, zal uw pet_data-tabel enkele wijzigingen vereisen. Verander gewoon de tabelkolom in pet_type
. Laravel verwacht dat een bepaalde naam voor deze kolom en voor de inhoud ervan de naam van een model is in plaats van de naam van uw tabel.
Het opzetten van de modellen hiervoor is heel eenvoudig, ik doe de PetData en de Dog om aan de slag te gaan.
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();
}
}
Hier kun je meer over lezen... http://laravel.com/docs/eloquent# polymorfe-relaties
Het idee om voor alles aparte modellen/controllers te hebben, lijkt misschien veel werk, maar het gaat een lange weg wanneer u probeert extra dieren aan uw app te onderhouden of toe te voegen, omdat u de productiecode zelden hoeft aan te passen, waardoor de mogelijkheid van het introduceren van meer bugs bij het toevoegen van verbeteringen aan uw website.
Nu wordt het heel eenvoudig om een huisdier en gerelateerde huisdiergegevens op te slaan zonder dat u zich zorgen hoeft te maken over de pet_id en pet_type in de pet_data-tabel, Laravel zal dat voor u regelen. De functie op uw hondencontroller kan er als volgt uitzien...
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);
}
}
Wat betreft het maken van een andere controller voor beheerders, zou ik zeggen ja, doe dat. Het kan nooit kwaad om delen van uw website die u als verschillend beschouwt in verschillende bestanden te bewaren. Het helpt niet alleen bij de organisatie, maar nogmaals, bij het scheiden van zorgen, waar u waarschijnlijk meer over zou moeten lezen.
Er zijn ook enkele fantastische opties van derden voor het beheren van rollen. Ik heb zizaco/entrust
gebruikt eerder en vond het heel gemakkelijk te beheren. Het kan uw leven een stuk gemakkelijker maken als u probeert te beheren wie wat kan doen in uw web-app.