laravel从子关系中获取父数据

问题描述

嗨,我在客户与理赔之间有这种关系

客户模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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);
    }

}

索赔模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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');
        }           

}

我需要将索赔和客户的一些信息放在数据表中

我有一个父子关系作为数据表的第一和第二列,我从Claims表中放入了id和卷宗,但是我如何从Customer表中为每个卷宗获取例如contr_nom,contr_cog,电子邮件,polizza等?

我尝试过使用此控制器

class ComptaController extends Controller
{
    
    public function index(Request $request){

        if ($request->ajax()) {
            $data = Claims::with('customers')->get();

            /*Cannot access to  Customers from $data but i can see in the relationship*/
            dd($data->customers->contr_nom); GIVE ME ERROR

            return Datatables::of($data)
                ->addIndexColumn()
                ->addColumn('action',function($row){
                    $btn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
                    return $btn;
                })
                ->rawColumns(['action'])
                ->make(true);
        }
    
    return view('pages.compta');

    }
    
}

但是我无法访问每个档案的客户数据。 谢谢。

解决方法

export interface IItem {
  _a?: IItem | IItem[];
  _b?: IItem | IItem[];
  [key: string]: {
    _sub1?: any;
    _sub2?: any;
    _sub3?: boolean;
    [key: string]: IItem; // <--- it expects that _sub1..3 will be of type IItem
  }
}

foreach($data->customers as $customer){
    dd($customer->contr_nom);
}
,

使用数据表,我想您可以通过使用类似闭包方法的列来添加相关的客户详细信息

return Datatables::of($data)
                ->addIndexColumn()
                ->addColumn('contr_nom',function($row){
                    return $row->customers->contr_nom;
                })
                ->addColumn('contr_cog',function($row){
                    return $row->customers->contr_cog;
                })
                ->addColumn('email',function($row){
                    return $row->customers->email;
                })
                //.. and so on otehr columns
                ->addColumn('action',function($row){
                    $btn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>';
                    return $btn;
                })
                ->rawColumns(['action'])
                ->make(true);

我猜您每个索赔有一位客户,因此,如果在索赔模型中将customers()重命名为customer()会更好,

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...