Laravel从我的模型函数中获得价值

时间:2019-01-13 07:28:19

标签: php laravel model eloquent

我的模型调度有一个字段invoice_id。 这是一个外键,因此我可以使用以下代码获取发票详细信息:

protected $fillable = [
    'id',
    'truck_no',      
    'driver_name',      
    'driver_phone',      
    'gps_details',      
    'invoice_id',      
];

public function invoice(){
    return $this->belongsTo('App\Invoice')->select('id','invoice_no','permit_id');
}

现在我想从invoice()获取值allow_id,以便我可以使用它来获取许可证的详细信息。

permit_id =许可模式的ID

所以我使用下面的代码来获取许可数据。

public function permit(){
    return $this->hasOne('App\Permit','id',$this->invoice()->permit_id);
}

更新:

我的发票模型有:

class Invoice extends Model
{
    protected $fillable = [
        'id',
        'invoice_no',
        'invoice_date',
        'permit_id',
    ];

    public function permit(){
        return $this->hasOne('App\Permit', 'id', 'permit_id');
    }
}

我的许可模型具有:

class Permit extends Model
{
    protected $fillable = [
        'permit_type',
        'permit_no',
        'application_no',  
        'supply_unit', 
        'supply_unit_id' ,  
     ];

    public function supplyunit(){
        return $this->hasOne('App\SupplyUnit','id','supply_unit_id');
    }
}

根据建议,我在调度模型中添加了以下代码:

 class Dispatch extends Model
  {
    protected $fillable = [
        'id',
        'truck_no',      
        'driver_name',      
        'driver_phone',      
        'gps_details',      
        'invoice_id',      
    ];

    public function invoice(){
        return $this->hasOne('App\Invoice','id','invoice_id');
    }

    public function permit(){
        return $this->hasOne('App\Permit','id','permit_id');
    }
  }

但是它不起作用。我应该怎么做才能达到以上目标?还有其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

假设每张发票都有一张许可证,则您的关系定义应如下所示:

public function permit(){
    return $this->hasOne('App\Permit', 'id', 'permit_id');
}

编辑:如果发票属于许可证,即相反,则您的关系将改为:

public function permit(){
    return $this->belongsTo('App\Permit', 'permit_id');
}

编辑:基于更新的问题,我认为您对关系的定义有点错误。以下应该工作:

由于您在invoice_id中有一个App\Dispatch列,这意味着每个App\Dispatch都属于一张发票。

App\Dispatch中,您的关系定义应如下:

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

// permit does not belong to `App\Dispatch` as a direct relationship
// it should be removed

App\Invoice中,您的关系定义应如下:

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

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

App\Permit中,您的关系定义应如下:

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

要从发票模型中检索许可证ID,您可以这样做

$invoice->permit->id; 

答案 1 :(得分:2)

更改此行

ExecuteScalar

收件人

return $this->belongsTo('App\Invoice')->select('id','invoice_no','permit_id');

并在发票上添加以下代码

return $this->belongsTo('App\Invoice');

您可以通过

访问
public function permit(){
return $this->belongsTo('App\Permit');
}

或者如果您需要所有信息

Dispatch::find($id)->invoice->permit->id;