2016-09-22 52 views
0

的关系,我有三个型号:ManagerVendorBanquet 和的关系是:
如何获得laravel

  • 经理有一个供应商
  • 厂商有很多宴会

如何在laravel orm中获得所有关系的全部经理?

$manager = Manager::where('active',1)->get(); 
$vendor = $manager->vendor()->get();// -- dose not work! 
$banquet = $vendor->banquet()->get();// -- dose not work! 

Manager模型:

class Manager extends Model{ 
    protected $table = 'manager'; 
    protected $primaryKey = 'id'; 

    public function vendor(){ 
    return $this->hasOne('ACME\Entities\Vendor','managerId','id'); 
    } 
} 

这里是模型

供应商型号:

class Vendor extends Model{ 
    protected $table = 'vendor'; 
    protected $primaryKey = 'id'; 

    public function manager(){ 
     return $this->belongsTo('ACME\Entities\Manager_V','id','managerId'); 
    } 

    public function banquet(){ 
     return $this->hasMany('ACME\Entities\V_Banquet' ,'vendorId' ,'id'); 
    } 
} 

宴会型号:

class Banquet extends Model{ 
    protected $table = 'banquet'; 
    protected $primaryKey ='id'; 

    public function vendor() 
    { 
     return $this->belongsTo('ACME\Entities\Vendor' ,'vendorId' ,'id'); 
    } 
} 

回答

0

使用方法

$manager = Manager::with(['vendor','vendor.banquet'])->where('active',1)->get(); 

你将能够获得数据

$banquet = $manager->vendor->banquet; 
// $banquet will be array of banquet model objects 

记住的hasMany回报阵列,hasOne返回对象和属于关联返回的对象。

+0

好吧,如果我需要添加一个新的关系codition $供应商= $管理器 - >供应商() - >在哪里( '主动',1) - >得到( ); 我该怎么办。 – Fan

+0

我想你想添加关系模型的条件。 – anwerj

1

这不起作用,因为get()给出了经理的集合。供应商hasmany宴会,所以,banquets()在供应商模式将是一个很好的约定。你应该做这样的事情:

$managers = Manager::where('active',1)->with('vendor','vendor.banquets')->get(); 
    foreach($managers as $manager) 
    { 
      $vendor=$manager->vendor; 
      print_r($vendor); 
      foreach($vendor->banquets as $banquet) 
      { 
        print_r($banquet); 
      } 
    }