sql >> Databáze >  >> RDS >> Mysql

Jak být více Laravel v aplikaci CRUD?

Vypadá to, že nastavujete polymorfní vztah, v takovém případě bych vše oddělil, což znamená, že byste měli model pro Cat, Dog, Turtle a PetData. Měli byste ovladače pro CatController, DogController a TurtleController. A měli byste formulář pro kočku, formulář pro psa a formulář pro želvu, přičemž každý z nich také obsahuje vstupy pro data, která požadujete pro tabulku pet_info.

Chcete-li vytvořit polymorfní vztah, bude vaše tabulka pet_data vyžadovat určité změny. Stačí změnit sloupec tabulky na pet_type . Laravel očekává, že určitý název pro tento sloupec a jeho obsah bude spíše názvem modelu než názvem vaší tabulky.

Nastavení těchto modelů je velmi snadné, pro začátek udělám PetData a Pes.

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();
    }
}

Více si o tom můžete přečíst zde... http://laravel.com/docs/eloquent# polymorfní vztahy

Myšlenka mít oddělené modely/ovladače pro všechno se může zdát jako hodně práce, ale při pokusech o údržbu nebo přidání dalších zvířat do vaší aplikace zabere dlouhou cestu, protože byste jen zřídka museli upravovat produkční kód, čímž se ztratí možnost zavádění dalších chyb při pokusu o přidání vylepšení na váš web.

Nyní je velmi snadné uložit data o mazlíčkovi a souvisejících mazlíčcích, aniž byste se museli starat o pet_id a pet_type v tabulce pet_data, Laravel se o to postará za vás. Funkce vašeho ovladače psa může vypadat takto...

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);
    }
}

Pokud jde o vytvoření dalšího ovladače pro administrátory, řekl bych ano, udělejte to. Nikdy neuškodí ponechat části vašeho webu, které považujete za odlišné, v různých souborech. Pomáhá nejen s organizací, ale opět s oddělením starostí, o kterých byste si pravděpodobně měli přečíst více.

Existuje také několik fantastických možností třetích stran pro správu rolí. Použil jsem zizaco/entrust dříve a zjistil, že je velmi snadné jej spravovat. Může vám to hodně usnadnit život, když se snažíte řídit, kdo co může ve vaší webové aplikaci dělat.




  1. Limit ConnectionTimeout pro Oracle Database

  2. java.lang.ClassNotFoundException:com.mysql.jdbc.Driver (v jre's libs)

  3. MySQL Cross Server Select Query

  4. Urychlení velkého počtu aktualizací a vložení mysql