繁体   English   中英

laravel 从子关系中获取父数据

[英]laravel get parent data from child relationship

嗨,我在客户和索赔之间有这种关系

客户模型

<?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 和 dossier,但是我如何从 Customer 表中为每个 dossier 获取例如 contr_nom、contr_cog、email、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');

    }
    
}

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

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

或者

   Claims::with(array('customer'=>function($query){
        $query->select('id','contr_nom');
    }))->get();

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

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()要求模型更有意义

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM