使用此表结构将模型结构导入Laravel?

时间:2016-07-10 14:12:35

标签: php mysql laravel lumen

我正在将原有的PHP RESTful API项目迁移到Lumen API Project中。我被困在Eloquent Model的结构上,负责从数据库中获取,插入,更新或删除数据。我想知道模型的结构和映射。

以下是一些表结构:

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}

现在,当我访问stop模型时,我希望能够在单个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模型结构吗?

2 个答案:

答案 0 :(得分: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();
 }

不知道总体结构等,但希望它能帮助您找到或至少为您提供一个启动器

答案 1 :(得分: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');
  }
}

没有测试,但这应该朝着正确的方向发展。