2016-07-10 5 views
1

Я переношу старый простой проект API RESTful PHP в проект Lumen API. Я застрял в структуре Eloquent Model, ответственной за выборку, вставку, обновление или удаление данных из базы данных. Я хотел бы знать структуру и отображение Модели.Модельная структура в Laravel с этой структурой таблицы?

Вот некоторые структуры таблиц:

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} 

Теперь, когда я достигаю стоп Model, я хочу, чтобы иметь доступ к stop_detail, stop_images, stop_places, place_images в одной модели доступа. Это должно быть как

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

Может ли кто-нибудь помочь мне создать лучшую структуру Eloquent Model?

+0

Вам нужно больше взглянуть на отношения модели и т. Д., Например hasMany, hasOne, manyToMany и т. Д. –

+0

взгляните на https://laravel.com/docs/master/eloquent-relationships, чтобы правильно определить отношения в вашей модели Stop , а затем вы сможете правильно загрузить их с помощью методов 'with()'/'load()' –

+0

, помог ли вам один из ответов? – everyman

ответ

1

Так, например, в вашей остановки модели, вы могли бы иметь что-то вроде следующего, но я не уверен, что о реальных отношениях, так голые со мной и т.д.

class Stop extends Model { 

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

} 

Тогда называют это что-то вроде:

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

Не зная общую структуру и т.д., но надеется, что это поможет вам найти или, по крайней мере, дает стартер

0

вы хотите использовать «жадную загрузку» (https://laravel.com/docs/5.1/eloquent-relationships#eager-loading), правильно?

Так что метод, который вы написали, отлично - если приложение знает отношения.

В принципе вы можете догадаться, их довольно хорошо

Просто для примера (Так как тот, кто написал это, использовал простой именования конвенции.): image_stop_mapping {stop_id, image_id, order} и 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'); 
    } 
} 

Не проверить это, но это должно идти в правильном направлении.