我正在做一个物流学校项目,并正在使用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,例如它返回该地址的详细信息?