Laravel Eloquent 3桌之间的关系

时间:2014-02-27 17:06:53

标签: laravel eloquent

我正在做一个物流学校项目,并正在使用laravel。我有一个交货表并返回表,其中包含所有交货并分别返回内部。 delivery和returns表的类型为Normal Delivery或Return Delivery,并且具有映射到地址表的地址id。交货和退货表都有一个相同的跟踪ID

如果是正常交货,我必须参考客户表来获取客户详细信息,如果是退货交货,我必须参考驱动程序表以获取驱动程序详细信息。

我的交付模式如下

class Delivery extends Eloquent {
    public function address()
    {
        return $this->hasOne('Address','id', 'address_id');
    }

    public function customer()
    {
       return $this->hasOne('Customer', 'id', 'customer_id');
    }   

    public function driver()
    {
         return $this->hasOne('Driver', 'id', 'driver_id');
    } 

    public function return()
    {
         return $this->hasOne('Return', 'id', 'delivery_id');
    }
}

我的回归模型如下

 class Return extends Eloquent {

    public function address()
    {
        return $this->hasOne('Address','id', 'address_id');
    }

    public function customer()
    {
       return $this->hasOne('Customer', 'id', 'customer_id');
    }   

    public function driver()
    {
         return $this->hasOne('Driver', 'id', 'driver_id');
    } 

      public function delivery()
    {
         return $this->hasOne('Delivery', 'id', 'return_id');
    }
}

我的客户模型如下

class Customer extends Eloquent {

   public function addresses()
   {
         return $this->hasMany('Address', 'client_id', 'client_id');
   }


    public function delivery()
    {
        return $this->belongsTo('Delivery', 'customer_id', 'id');
    } 

我的驱动程序模型如下

class Driver extends Eloquent {

    public function addresses()
    {
        return $this->hasMany('Address', 'client_id', 'client_id');
    }

    public function delivery()
    {
        return $this->belongsTo('Delivery', 'driver_id', 'id');
    }  

我的地址模型如下

class Address extends Eloquent {

    public function customer()
    {
        return $this->belongsTo('Customer', 'client_id', 'client_id');      
    }

    public function driver()
    {
        return $this->belongsTo('Driver', 'client_id', 'client_id');        
    }

    public function return()
    {
        return $this->belongsTo('Return', 'address_id', 'id');
    }

    public function delivery()
    {
        return $this->belongsTo('Delivery', 'address_id', 'id');
    } 

所以现在,给定一个跟踪ID,我需要获取所有交付并返回行以及正确的地址。目前我正在按照以下方式进行交付

$deliveries = Delivery::select(array('*', DB::raw('COUNT(id) as count')))->with('address','address.customer','customer')->whereIn('tracking_id', $tracking_id)

和退货

$returns= Return::select(array('*', DB::raw('COUNT(id) as count')))->with('address','address.driver','customer')->whereIn('tracking_id', $tracking_id)

当我将这两者结合在一起时,我必须先检查它是否是交付或返回,然后才能访问address.customer进行交付和address.driver返回。有没有办法解决这个问题,当我将这两组结果合并到一起时,我仍然可以访问一个address.contact,例如它返回该地址的详细信息?

0 个答案:

没有答案