问题描述
嗨,我在客户与理赔之间有这种关系
客户模型
<?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()
会更好,