Es sieht so aus, als würden Sie eine polymorphe Beziehung einrichten. In diesem Fall würde ich alles separat erstellen, was bedeutet, dass Sie ein Modell für Cat, Dog, Turtle und PetData hätten. Sie hätten Controller für CatController, DogController und TurtleController. Und Sie hätten ein Katzenformular, ein Hundeformular und ein Schildkrötenformular, die jeweils auch Eingaben für die Daten enthalten, die Sie für Ihre pet_info-Tabelle benötigen.
Um die polymorphe Beziehung zu erstellen, sind einige Änderungen an Ihrer pet_data-Tabelle erforderlich. Ändern Sie einfach die Tabellenspalte in pet_type
. Laravel erwartet einen bestimmten Namen für diese Spalte und dafür, dass ihr Inhalt der Name eines Modells und nicht der Name Ihrer Tabelle ist.
Das Einrichten der Modelle dafür ist sehr einfach, ich mache die PetData- und die Dog-Modelle, um loszulegen.
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 können Sie mehr darüber lesen ... http://laravel.com/docs/eloquent# polymorphe Beziehungen
Die Idee, separate Modelle/Controller für alles zu haben, mag nach viel Arbeit erscheinen, aber es ist ein langer Weg, wenn Sie versuchen, Ihrer App zusätzliche Tiere beizubehalten oder hinzuzufügen, da Sie den Produktionscode selten ändern müssen, was die Möglichkeit nimmt weitere Fehler einführen, wenn Sie versuchen, Verbesserungen zu Ihrer Website hinzuzufügen.
Jetzt wird es sehr einfach, ein Haustier und zugehörige Haustierdaten zu speichern, ohne sich um die pet_id und pet_type in der pet_data-Tabelle kümmern zu müssen, Laravel kümmert sich darum. Die Funktion auf Ihrem Hundecontroller könnte so aussehen...
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);
}
}
Was die Erstellung eines weiteren Controllers für Administratoren angeht, würde ich sagen, ja, tun Sie das. Es schadet nie, Teile Ihrer Website, die Sie für unterschiedlich halten, in verschiedenen Dateien aufzubewahren. Es hilft nicht nur bei der Organisation, sondern auch bei der Trennung von Anliegen, worüber Sie wahrscheinlich mehr lesen sollten.
Es gibt auch einige fantastische Optionen von Drittanbietern zum Verwalten von Rollen. Ich habe zizaco/entrust
verwendet vorher und fand es sehr einfach zu handhaben. Es könnte Ihr Leben viel einfacher machen, wenn Sie versuchen zu verwalten, wer was in Ihrer Web-App tun darf.