Laravel - 如何使用 ajax 显示其他表中的数据

Posted

技术标签:

【中文标题】Laravel - 如何使用 ajax 显示其他表中的数据【英文标题】:Laravel - How to display data from other table by using ajax 【发布时间】:2021-11-29 23:28:00 【问题描述】:

我是 laravel 的初学者。我想加入一些表并将其显示在数据表中,我正在使用 yajra 数据表。我有三个表,分别是区域、分公司和分公司经理。我的问题是我想在刀片视图中显示分支表,但不是显示 area_id 和 branch_manager_id,而是显示 Area Table 中的 area_desc 和 Branch Manager Table 中的 branch_manager_name >。我不知道如何获得它。

面积表

public function up()
    
        Schema::create('area', function (Blueprint $table) 
            $table->engine = 'InnoDB';
            $table->bigIncrements('id');
            $table->string('area_code')->unique();
            $table->string('area_desc');
            $table->timestamps();
        );
    

分行经理表

    public function up()
    
        Schema::create('branch_manager', function (Blueprint $table) 
            $table->engine = 'InnoDB';
            $table->bigIncrements('id');
            $table->string('branch_manager_name');
            $table->string('branch_manager_contact_number');
            $table->timestamps();
        );
    

分支表

public function up()
    
        Schema::create('branch', function (Blueprint $table) 
            $table->engine = 'InnoDB';
            $table->bigIncrements('id');
            $table->string('branch_name');
            $table->string('branch_address1');
            $table->string('branch_address2');
            $table->bigInteger('area_id')->unsigned();
            $table->bigInteger('branch_manager_id')->unsigned();
            $table->timestamps();
        );

        Schema::table('branch', function (Blueprint $table) 
            $table->foreign('area_id')->references('id')->on('area')->onUpdate('cascade');
            $table->foreign('branch_manager_id')->references('id')->on('branch_manager')->onUpdate('cascade');
        );
    

区域模型

class Area extends Model

    use HasFactory;

    protected $table = 'area';
    protected $fillable = [
        'area_code',
        'area_desc',
    ];

    public function branch()
    
        return $this->hasMany(Branch::class);
    

分公司经理模型

class BranchManager extends Model

    use HasFactory;

    protected $table = 'branch_manager';
    protected $fillable = [
        'branch_manager_name',
        'branch_manager_contact_number'
    ];

    public function branch()
    
        return $this->hasOne(Branch::class);
    

布拉赫模型

class Branch extends Model

    use HasFactory;

    protected $table = 'branch';
    protected $fillable = [
        'branch_name',
        'branch_address1',
        'branch_address2',
        'area_id',
        'branch_manager_id',
    ];

    public function area()
    
        return $this->belongsTo(Area::class);
    

    public function branchManager()
    
        return $this->belongsTo(BranchManager::class);
    

Ajax 请求分支数据表

<script type="text/javascript">
        $(function() 
            $.ajaxSetup(
                headers: 
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                
            );

            var table = $('.table-striped.first').DataTable(
                processing: true,
                serverSide: true,
                ajax: " route('settings.branch.list') ",
                columns: [
                        data: 'branch_name',
                        name: 'branch_name'
                    ,
                    
                        data: 'branch_address1',
                        name: 'branch_address1'
                    ,
                    
                        data: 'branch_address2',
                        name: 'branch_address2'
                    ,
                    
                        data: 'area_id',
                        name: 'area_id'
                    ,
                    
                        data: 'branch_manager_id',
                        name: 'branch_manager_id'
                    ,
                    
                        data: 'action',
                        name: 'action',
                        orderable: true,
                        searchable: true
                    ,
                ]
            );
</script>

分公司主管

    public function branch(Request $request)
    
        $branches = Branch::latest()->get();
        $areas = Area::latest()->get();
        $branchManagers = BranchManager::latest()->get();

        if ($request->ajax()) 
            $data = Branch::latest()->get();
            return Datatables::of($data)
            ->addIndexColumn()
            ->addColumn('action', function($row)
                $btn = '<a href="javascript:void(0)" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="Edit" class="btn btn-sm btn-outline-light editRecord">Edit</a>';

                $btn = $btn.' <a href="javascript:void(0)" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="Delete" class="btn btn-sm btn-outline-light deleteRecord"><i class="far fa-trash-alt btn-outline-danger"></i></a>';

                return $btn;
            )
            ->rawColumns(['action'])
            ->make(true);
        

        return view('admin.branch', compact('branches', 'areas', 'branchManagers'));
    

任何 cmets 将不胜感激,谢谢

【问题讨论】:

【参考方案1】:

在 BrachController.php

public function branch(Request $request)
    
        if ($request->ajax()) 
            $data = Branch::with('area','branchManager')->latest()->get();
            return Datatables::of($data)
            ->addIndexColumn()
            ->addColumn('area_desc', function($row)
                return $row->area->area_desc;
             )
            ->addColumn('branch_manager_name', function($row)
                return $row->branchManager->branch_manager_name;
             )
            ->addColumn('action', function($row)
                $btn = '<a href="javascript:void(0)" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="Edit" class="btn btn-sm btn-outline-light editRecord">Edit</a>';

                $btn = $btn.' <a href="javascript:void(0)" data-toggle="tooltip"  data-id="'.$row->id.'" data-original-title="Delete" class="btn btn-sm btn-outline-light deleteRecord"><i class="far fa-trash-alt btn-outline-danger"></i></a>';

                return $btn;
            )
            ->rawColumns(['area_desc', 'branch_manager_name', 'action'])
            ->make(true);
        

        return view('admin.branch');
    

在刀片中

<script type="text/javascript">
        $(function() 
            $.ajaxSetup(
                headers: 
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                
            );

            var table = $('.table-striped.first').DataTable(
                processing: true,
                serverSide: true,
                ajax: " route('settings.branch.list') ",
                columns: [
                        data: 'branch_name',
                        name: 'branch_name'
                    ,
                    
                        data: 'branch_address1',
                        name: 'branch_address1'
                    ,
                    
                        data: 'branch_address2',
                        name: 'branch_address2'
                    ,
                    
                        data: 'area_desc',
                        name: 'area_desc'
                    ,
                    
                        data: 'branch_manager_name',
                        name: 'branch_manager_name'
                    ,
                    
                        data: 'action',
                        name: 'action',
                        orderable: true,
                        searchable: true
                    ,
                ]
            );
</script>

【讨论】:

感谢@Kashan Baig,您的代码有效! 嗨兄弟,@Kashan Baig,我还有一个问题,你能帮帮我吗? 是的,当然。有什么问题 兄弟@Kashan Baig 你能帮我直接访问这个链接吗link 我的一个表无法显示数据,我不知道如何解决。

以上是关于Laravel - 如何使用 ajax 显示其他表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel AJAX和没有url的分页

使用 Laravel 和 AJAX 根据另一个输入的值显示其他输入

如何将数据库中的值显示到 Laravel 和 Ajax 中的选项值

Laravel 8 和 Ajax - 将数据插入表中总是刷新加载

如何使用 ajax 一键插入两行 Laravel

Laravel 使用 ajax 请求在同一张桌子上返回父母的孩子?