【问题标题】:Laravel get value from my function in ModelLaravel 从我在模型中的函数中获取价值
【发布时间】:2019-01-13 07:28:19
【问题描述】:

我的模型 Dispatch 有一个字段 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() 中获取值 permit_id,以便我可以使用它来获取许可证的详细信息。

permit_id = Permit 模型的 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');
    }
  }

但它不起作用。我应该怎么做才能实现上述目标?有没有其他解决方案请建议。

【问题讨论】:

    标签: php laravel model eloquent


    【解决方案1】:

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

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

    编辑:如果发票属于许可证,则相反,您的关系将如下所示:

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

    编辑:根据您更新的问题,我认为您的关系定义有点错误。以下应该有效:

    由于您在App\Dispatch 中有一个invoice_id 列,这意味着每个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');
    }
    

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

    $invoice->permit->id; 
    

    【讨论】:

    • 是的,每张发票都属于一个许可证。 public function permit(){ return $this->belongsTo('App\Permit');这就是我使用的。但是您的代码显示为空。
    • 编辑了我的答案以定义关系的倒数。
    • 您能否向我们展示您在以下类中的关系定义:App\PermitApp\DispatchApp\Invoice
    • 好的,我们应该开始聊天吗?
    【解决方案2】:

    改变这一行

    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;
    

    或者如果你想要所有的信息

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

    【讨论】:

    • 检查这个。您可以轻松获取所有信息。
    • 我想在模型本身中得到它。使用 invoice()。有可能吗?
    • 不知道,因为我不需要这样做。但是您希望从中获得什么?
    • 原因是因为我必须遍历所有数据并像这样添加 permit_no。 $dispatches = Dispatch::with('invoice')->get(); foreach ($dispatches as $index => $value) { $permit_no = Dispatch::find($value->id)->invoice->permit->permit_no; $value['sno'] = ++$index; $value['permit_no'] = $permit_no; }
    • 你可以这样做。$dispatches= Dispatch::all(); foreach($dispatches as $dispatch){ $permit_no = $dispatch->invoice->permit->id; }。同样,您也可以得到其他人。不需要再次调用模型
    猜你喜欢
    • 2021-06-04
    • 2023-03-18
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    相关资源
    最近更新 更多