如何通过方法链

时间:2015-07-25 09:16:52

标签: php laravel laravel-5

我有以下型号,Item.php和Shipment.php设置。我要做的是根据货件ID显示项目名称。我可以通过 $ shipment = App \ Shipment ::其中(' id',4) - > get(); 访问货件但我完全迷失了如何根据Shipment模型检索项目名称。

我正在考虑与$ shipment - > items() - > getName等类似的东西,但我似乎无法绕过它。

Item.php

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Item extends Model
{

    protected $fillable = ['name',
        'description',
        'category',
        'condition'
    ];

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

    public function category() {
        return $this->hasOne('App\Category');
    }

    public function shipments(){
        return $this->belongsToMany('App\Shipment');
    }

Shipment.php

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Shipment extends Model {


    protected $fillable = ['id',
        'item_id',
        'qty',
        'user_id'
    ];

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

    public function items(){
        return $this->hasMany('App\Item','id','item_id');
    }

1 个答案:

答案 0 :(得分:1)

知道某种方法会返回什么是很重要的。如果是集合或单个模型实例。例如,它返回一个集合(即使它只有一个模型)

z=2001.0,Y=0.88

而是使用App\Shipment::where('id',4)->get(); first()为id添加where子句,然后只返回一个:

find()

这种关系很相似。由于App\Shipment::find(4); 是hasMany关系,因此它将始终返回一个集合。这意味着通常您将检索项目并循环遍历它们:

items

另请注意,foreach($shipment->items as $item){ echo $item->name; } $shipment->items()之间存在差异 有关详情,请阅读this answer