sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bliver man mere Laravel i en CRUD-app?

Det ser ud til, at du opretter en polymorf relation, i så fald vil jeg gøre alt adskilt, hvilket betyder, at du vil have en model for Cat, Dog, Turtle og PetData. Du ville have controllere til CatController, DogController og TurtleController. Og du vil have en Katteformular, en Hundeformular og en Skildpaddeformular, som hver også indeholder input til de data, du har brug for til din pet_info-tabel.

For at skabe den polymorfe relation vil din pet_data-tabel kræve nogle ændringer. Du skal bare ændre tabelkolonnen til pet_type . Laravel forventer, at et bestemt navn for denne kolonne og dens indhold er navnet på en model i stedet for navnet på din tabel.

Det er meget nemt at konfigurere modellerne til disse, jeg laver PetData og Dog for at komme i gang.

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æse mere om dette her... http://laravel.com/docs/eloquent# polymorfe relationer

Ideen med at have separate modeller/controllere til alt kan virke som en masse arbejde, men det rækker langt, når man forsøger at vedligeholde eller tilføje flere dyr til sin app, fordi man sjældent skal ændre produktionskoden, hvilket fjerner muligheden for introducerer flere fejl, når du forsøger at tilføje forbedringer til dit websted.

Nu bliver det meget nemt at gemme et kæledyr og relaterede kæledyrsdata uden at skulle bekymre dig om pet_id og pet_type i pet_data-tabellen, Laravel tager sig af det for dig. Funktionen på din hundecontroller kan se sådan ud...

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

For så vidt angår oprettelse af en anden controller til administratorer, vil jeg sige ja, gør det. Det skader aldrig at beholde dele af dit websted, som du anser for forskellige, i forskellige filer. Det hjælper ikke kun med organisering, men igen med adskillelse af bekymringer, som du nok skal læse mere om.

Der er også nogle fantastiske 3. parts muligheder for at administrere roller. Jeg har brugt zizaco/entrust før og fandt det meget nemt at administrere. Det kan gøre dit liv meget nemmere, når du prøver at styre, hvem der kan gøre hvad på din webapp.




  1. SYSTIMESTAMP Funktion i Oracle

  2. Hvordan kan jeg knytte en lokal unix-socket til en inet-socket?

  3. opret tabelbegrænsning i mysql

  4. PostgreSQL-funktionen findes ikke