2016-07-10 6 views
1

Ich migriere alte einfache PHP RESTful API Projekt in Lumen API Project. Ich stehe auf der Struktur des Eloquent-Modells fest, das für das Abrufen, Einfügen, Aktualisieren oder Löschen von Daten aus der Datenbank verantwortlich ist. Ich würde gerne die Struktur und das Mapping von Model kennenlernen.Modellstruktur in Laravel mit dieser Tabellenstruktur?

Hier sind einige Tabellenstrukturen:

stop {id, stop_name, stop_code, stop_status} 

stop_detail {detail_id, stop_id, description, created_on, modified_on} 

image {image_id, image_path, description, seq_order, is_thumb} 

image_stop_mapping {stop_id, image_id, order} 

place {place_id, place_title, description, place_status, order} 

image_place_mapping {place_id, image_id, order} 

Nun, wenn ich den Anschlag Modell zugreifen, möchte ich in der Lage, die stop_detail, stop_images zuzugreifen, stop_places, place_images in einem einzigen Modell Zugang. Es sollte wie sein

public function findByStopId($stopId) { 
    return Stop::where('id', $stopId)->with('stop_detail', 'stop_detail.stop_images', 'places', 'places.images')->get(); 
} 

Kann mir jemand helfen, die bessere Struktur des Eloquent Model zu erstellen?

+0

Sie müssen mehr in Modellbeziehungen etc suchen wie hasMany, hasOne, manyToMany, etc. –

+0

Werfen Sie einen Blick auf https://laravel.com/docs/master/eloquent-relationships, um Beziehungen in Ihrem Stop-Modell richtig zu definieren , und dann können Sie sie richtig laden, indem Sie 'with()'/'load()' Methoden benutzen –

+0

Hat eine der Antworten Ihnen geholfen? – everyman

Antwort

1

So zum Beispiel in Ihrem Stop-Modell, könnten Sie so etwas wie die folgenden, aber ich bin nicht sicher über die tatsächlichen Verhältnisse bei mir so kahl etc

class Stop extends Model { 

     public function stopdetails(){ 
      return $this->hasMany(StopDetails::class, 'stop_id'); 
    } 

} 

es dann nennen so etwas wie:

public function findByStopId($stopId) { 
     return Stop::where('id', $stopId)->with('stopdetails')->get(); 
} 

Ohne die Gesamtstruktur usw. zu kennen, aber hoffe, es hilft Ihnen, oder zumindest gibt Ihnen ein Starter

0

Sie verwenden „eager loading“ wollen (https://laravel.com/docs/5.1/eloquent-relationships#eager-loading), richtig?

Also die Methode, die Sie geschrieben haben, ist völlig in Ordnung - Wenn die App die Beziehungen kennt.

Grundsätzlich kann man sie recht gut erraten

Gerade für ein Beispiel (Da derjenige, der es geschrieben hat, eine einfache Namenskonvention verwendet.): image_stop_mapping {stop_id, image_id, order} und stop_detail {id, stop_id, description, created_on, modified_on}

class Image extends Model 
{ 
    // ... 
} 

class ImageStopMapping extends Model 
{ 
    public function image() 
    { 
    return $this->belongsTo('App\Image'); 
    } 

    public function stop() 
    { 
    return $this->belongsTo('App\Stop'); 
    } 
} 

class Stop extends Model 
{ 
    public function stop_images() 
    { 
    return $this->hasManyThrough('App\Image', 'App\ImageStopMapping'); 
    } 

    public function details() 
    { 
    return $this->hasMany('App\StopDetail'); 
    } 
} 

class StopDetail extends Model 
{ 
    public function stop() 
    { 
    return $this->belongsTo('App\Stop'); 
    } 
} 

nicht getestet es, aber das sollte in die richtige Richtung gehen.

Verwandte Themen