我的模型调度有一个字段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');
}
}
但是它不起作用。我应该怎么做才能达到以上目标?还有其他解决方案吗?
答案 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;