Laravel 5关系的三种模式

时间:2017-04-06 12:36:22

标签: php mysql laravel

订单表

 id   total        created_at
 ---+------------+--------------
 2    1500.99      2017-02-02

项目表

 id   order_id    product_id   quant
 ---+-----------+------------+-------
 66    2              5          1
 67    2              6          2
 68    3              5          2

产品表

 id   name        created_at
 ---+------------+--------------
 5   PC Intel    2017-02-02
 6   PC AMD      2017-02-02

模型

//Order Model
class Order extends Model{
 public function items(){
    return $this->hasMany('App\Item');
 }
}

// Item Model
class Item extends Model{
 public function producto(){
    return $this->hasOne('App\Product');
}
} 

// Product Model
class Product extends Model{
 public function item(){
    return $this->hasOne('App\Item');
 }
}

我想显示关系模型的产品名称。例如,我有

 $order = Order::with('items')->find($id);

但是如何为产品的打印名称添加第三个模型?例如,打印此

$order->items->product->name //"PC Intel"

2 个答案:

答案 0 :(得分:1)

$order->items返回一个集合。您无法访问属性。

相反,您必须循环遍历集合中的所有对象

foreach($order->items as $item) {
    $item->product->name;
}

也许您应该将产品添加到您的预期加载

order = Order::with('items.producto')->find($id);

答案 1 :(得分:0)

根据您的表格,项目应该是这样的:

// Item Model
class Item extends Model{
    public function product(){
        return $this->belongsTo('App\Product');
    }

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

对于检索产品名称,您应该知道items()会返回一个集合,所以:

$order->items[0]->product->name //"PC Intel"