ポリモーフィックな関係を設定しているように見えます。その場合は、すべてを個別に作成します。つまり、Cat、Dog、Turtle、およびPetDataのモデルがあります。 CatController、DogController、およびTurtleControllerのコントローラーがあります。また、Catフォーム、Dogフォーム、Turtleフォームがあり、それぞれに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#ポリモーフィック関係
すべてに個別のモデル/コントローラーを用意するというアイデアは大変な作業のように思えるかもしれませんが、本番コードを変更する必要がほとんどなく、アプリに動物を追加したりする場合は、大きな効果があります。 Webサイトに拡張機能を追加しようとすると、さらに多くのバグが発生します。
これで、pet_dataテーブルのpet_idとpet_typeを気にすることなく、ペットと関連するペットデータを非常に簡単に保存できるようになりました。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
を使用しました 以前は、管理が非常に簡単であることがわかりました。誰があなたのウェブアプリで何ができるかを管理しようとすると、あなたの生活がずっと楽になるかもしれません。