Laravel在关系中访问二级父表

时间:2020-09-16 14:53:00

标签: laravel eloquent

我使用过laravel,并且我拥有此模型以及表格之间的关系

客户表

class Customers extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'contr_nom',
        'contr_cog',
        'benef_nom',
        'benef_cog',
        'email',
        'polizza',
        'targa',
        'iban',
        'int_iban',
        'cliente',
    ];

    public function claims()
        {
            return $this->hasMany(Claims::class);
        }
        
    public function refunds()
    {
        return $this->hasManyThrough(Refunds::class, Claims::class);
    }

}

索赔表

class Claims extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'dossier',
        'date_cla',
    ];

    public function refunds()
        {
            return $this->hasMany(Refunds::class);
        }           
        
    public function customers()
        {
            return $this->belongsTo(Customers::class,'customers_id');
        }           

}

退款表

class Refunds extends Model
{
    public $primaryKey = 'id';
    protected $fillable = [
        'date_ref',
        'status_ref',
        'disactive',
        'num_pre',
        'date_liq',
    ];

    public function services()
        {
            return $this->belongsToMany(Services::class)
                ->withPivot(['services_id','services_amount','services_status']);
        }       
        
    public function claims()
        {
            return $this->belongsTo(Claims::class,'claims_id');
        }           

}

在控制器中,我执行了此功能

 public function addDateLiq2(Request $request){
 
      $date_liq = request("date_liq");

      $refunds = Refunds::whereNotNull('num_pre')->get();
      
      foreach ($refunds as $refund) {
        $status_ref= $refund->status_ref;
        if ($status_ref == 5){
          //send mail
          //I need to retrieve mail field from customers table
        }

        $refund->date_liq = $date_liq;
        $refund->save();

        if(!$refund->save()){
          App::abort(500, 'Error');
        }
      }

      return Response::json(array('success' => 'Date salvate massivamente correttamente!'), 200);

    }

在num_pre不为null的所有记录中添加日期。 好的,我也想发送邮件,但是“邮件”字段位于“客户”父表中....我如何访问它? 谢谢

1 个答案:

答案 0 :(得分:0)

好吧,我似乎在addDateLiq2函数中找到了解决方法

      $data =  Claims::with(array('customers'=>function($query){
        $query->select('id','email');
      }))
      ->whereHas('refunds', function($query) use($claims_id) {
        $query->where('claims_id', $claims_id);
      })
      ->first();
相关问题