Laravel 4:在将结构缩减为多个表时保持表关系

时间:2013-08-05 13:09:11

标签: laravel laravel-4 relationships

历史:

DB:表客户端和标题

客户可以拥有多个标题,但标题只能有一个客户。所以我将使用简单的一对多关系,如下图所示: 客户端模型

  class Client extends Eloquent {
      public function titles(){
          return $this->hasMany('titles');
      }  
  }

然后我只需使用以下内容获取所选标题的请求数据

  $clientTitles = Client::find(1)->titles;

总而言之,这应列出所有与客户相关的标题。

我的问题实际上是因为我希望将我的titles表中的数据拆分成较小的表格,因为我还在系统中的某个地方使用了标题数据的某些方面,并且不需要每个都获得所有的标题详细信息时间。

所以我会有另外三个与标题数据表相关的表

标题,Title_Artwork,Title_Details,Titles_List

现在,如果我使用与上面相同的内容,我将获得titles表中的所有数据,但不会获得其他三个数据。那么我怎么能更新我的关系然后刮掉其他三个标题表,所以当我需要时,我可以获得所有数据,而不是。

或者是否有另一种方法可以做到这一点,或者不保留我所做的只是限制对我需要的字段的调用?

1 个答案:

答案 0 :(得分:0)

根据我的理解,我们假设你的Titles模型有点像 -

class Titles extends Eloquent{
  public function titleartwork(){
    return ..
  }
  public function titledetails(){
    return ..
  }
  public function titlelist(){
    return ..
  }
}

您的客户端模型是 -

class Client extends Eloquent {
  public function titles(){
      return $this->hasMany('titles');
  }  
}

因此,为了获取任何这些表的数据Title_Artwork, Title_Details, Titles_List 你可以这样做

$clientTitles = Client::with('Titles','Titles.titleartwork','Titles.titlelist')->where('id','=',1)->get();

就Laravel而言,它被称为渴望加载,了解更多信息,您可以查看doc

它也适用于多个嵌套,我的意思是如果您的Title_Artwork也包含类似的关系 -

class TitleArtwork extends Eloquent{
  public function sometable(){
    return ..;
  }
}

然后您可以使用

获取sometable的数据
$clientTitles = Client::with('Titles','Titles.titleartwork.sometable','Titles.titlelist')->where('id','=',1)->get();