【问题标题】:laravel get parent data from child relationshiplaravel 从子关系中获取父数据
【发布时间】:2020-08-26 14:18:56
【问题描述】:

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

客户模型

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

    }
    
}

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

【问题讨论】:

  • $data 是一个集合,因此您无法直接访问集合上的customers 尝试获取第一个索赔客户以进行测试$data[0]-&gt;customers-&gt;contr_nom
  • 哦,是的,但是我怎样才能在数据表中进行 rapresenting?我需要使用 foreach 创建一个自定义集合吗?

标签: laravel eloquent datatables yajra-datatable


【解决方案1】:
foreach($data->customers as $customer){
    dd($customer->contr_nom);
}

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

【讨论】:

  • 太好了,现在我在 $data 集合中也看到了。我在数据表配置中使用这个 customers.contr_nom 进行访问,它可以工作!
【解决方案2】:

使用数据表我猜你可以通过添加带有闭包方法的列来添加相关的客户详细信息

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() 更有意义

【讨论】:

    猜你喜欢
    • 2020-12-19
    • 2020-07-01
    • 2018-02-14
    • 1970-01-01
    • 2020-04-11
    • 2021-08-06
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    相关资源
    最近更新 更多