Laravel:使用Eloquent belongssto,从两个表中获取数据?

时间:2014-10-30 14:50:49

标签: php database laravel eloquent

在Controller中,我想传递唯一一个变量,其中包含来自parent的指定列。现在,我正在使用

View::make('store.product')->with('products', Product::find($id)
->join('design','product.design_id','=','design.id')
->join('user','design.user_id','=','user.id')
->select('user.name','design.title','product.price')
->get();

我的问题是

1.使用Belongsto有更好的方法吗?

2.如果可以的话,它和Hasmany一样吗?

这是我的表结构。

用户

id | name
1  | 'John'

设计

id | user_id |  title
1  |    1    | 'Chill'  
2  |    1    |  'Mad'

产品

id | design_id | price
1  |     1     |  20  
2  |     1     |  30

模型就像这样

产品属于设计设计属于用户

1 个答案:

答案 0 :(得分:8)

为您的用户添加一种方法,就像您的设计一样;

public function designs(){
    $this->hasMany('Design');
}

对于设计模型,添加以下方法;

public function user(){
    $this->belongsTo('User');
}

public function products(){
    $this->hasMany('Product');
}

适用于您的产品型号

public function design(){
    $this->belongsTo('Design');
}

这些将建立关系,允许您急切加载模型上的数据。

这可以这样做;

$variable = Product::with('designs')->find(1); //This will load the product with the related designs

如果您希望所有设计和属于设计的用户执行以下操作;

$variable = Product::with('designs', 'design.user')->find(1); //This will load the designs that relate to the Product and include the user that that design belongs to on the Design model.

要访问这些属性,请使用以下内容;

$variable->designs //This will return a collection of all the designs.
$variable->designs->first()->user //This will return the user model that the design belongs to.

显示信息的示例;

@foreach ($variable->designs as $design)
    {{ $design->user->username }}
@endforeach

请注意:我尚未测试此代码。