laravel视图中的别名列名称

时间:2020-08-01 16:40:53

标签: php laravel join eloquent alias

嗨,我有一个3连接表,它自然会有重复的列名,例如id。简而言之,我有3个表,分别是:

bas_role
id
name
bas_app
id
app_name
bas_role_app
id
role_id
app_id

我的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Illuminate\Support\Facades\Route;
use App\User;
use App\Role;
use App\App;
use App\ActivityLog;
use App\RoleApp;
use  DataTables;
use Illuminate\Support\Facades\Input;
use Illuminate\Database\Eloquent\JsonEncodingException;


use DB;

class RoleAppController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function display(Request $request)
    {


        // $role = \App\Role::first();
        // $app =  \App\App::first();
        // // $role->apps()->attach($app);
        // $app->roles()->attach($role);

        $routes =  preg_match('/([a-z]*)@([a-z]*)/i', Route::currentRouteAction(), $matches);
        $routes = $matches[0];
        $action = $matches[2];
        if (Auth::check()) {

            $id = Auth::id();
           DB::beginTransaction();

        try {
           $profile_data = User::find($id);
             ActivityLog::create([

                'inserted_date' => Carbon::now()->TimeZone('asia/jakarta'),
                'username' => $profile_data->username,
                'application' =>$routes,
                'creator' => "System",
                'ip_user' => $request->ip(),
                'action' => $action,
                'description' => $profile_data->username. " is looking at roleApp",
                'user_agent' => $request->server('HTTP_USER_AGENT')
             ]);



        // $pagination = TRUE;
        $app =DB::table('bas_role_app')
        ->join('bas_role_app','bas_app.id','=','bas_role_app.app_id')
        ->join('bas_role','bas_role_app.role_id','=','bas_role.id')
        ->from('bas_app')
        // ->where('role_user.role_id', 4)
        ->select('*')
        //        ->from('bas_app')
        //        // ->where('role_user.role_id', 4)
                ->Orderby('bas_role_app.id')
                ->get();
                // dd($app);
                DB::commit();
            } catch (\Exception $ex) {
                DB::rollback();
            return response()->json(['error' => $ex->getMessage()], 500);
            }
               // dd($app);
        return view('/roleapp', ['app' => $app]);
    }else {

        return view("login");
    }
}

public function getroleapp(){

    $app = DB::table('bas_role_app')
    ->join('bas_role_app','bas_app.id','=','bas_role_app.app_id')
    ->join('bas_role','bas_role_app.role_id','=','bas_role.id')
    ->from('bas_app')
    ->select('*')
    ->get();
    return Datatables::of($app)->make(true);
}



     public function update(Request $req, $id)
     {
        // if(request()->ajax())
        // {
        //     $data = DB::table('bas_role_app')->findOrFail($id);
        //     return response()->json(['result' => $data]);
        // }

    }

    public function delete(Request $request, $id)
    {
        try {


        $role = RoleApp::findOrFail($id);
    // // $app->roles()->detach();
     $role->apps()->detach();
    // // $app->delete();
     $role->delete();

    // $app_id   =   (int)Request('visit_id');
    // $role_id =   (int)Request('product_id');

        DB::commit();
    } catch (\Exception $ex) {
        DB::rollback();
    return response()->json(['error' => $ex->getMessage()], 500);
    }
        return redirect('/roleapp');

    }

    public function insert(Request $request)
    {

    }

    public function descriptionLog($id, $temp, $oldData, $newData)
    {
        $newString = '<div><table class="table table-striped"><tr><td scope="col"><b>ID:</b> </td><td><b>' . $id . '</b></td><td></td></tr><tr><td><b>Field</b></td><td><b>Old Data</b></td><td><b>New Data</b></td></tr>';

        $arr = '';

        for ($k = 0; $k < count($oldData); $k++) {
            if ($oldData[$k] != $newData[$k]) {
                $arr = '<tr><td>' . $temp[$k] . '</td><td>' . $oldData[$k] . '</td><td>' . $newData[$k] . '</td></tr>';
            }
        }

        $newString = $newString . $arr . '</table></div>';

        return $newString;
    }

}

我的观点

@extends('layouts.master')
@section('title','App')
@section('content')


<div class="container mt-5">
    <div class="row">
        <div class="col-12">
            <!-- Modal -->
            <div class="float-left">
                    <div class="form-group mx-sm-3 mb-2">
                    <form class="form-inline">

            <button type="button" class="btn btn-default" data-toggle="modal" data-target="#exampleModalCenter">
                        <i class="ni ni-fat-add"></i>
                        </button>
                    </div>
                    </form>
            </div>
            {{-- <div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
                <div class="modal-dialog modal-dialog-centered" role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title" id="exampleModalLongTitle">New Role App</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <form action="roleapp/create" method="POST">
                                {{ csrf_field() }}

                                <div class="form-group">
                                    <label for="username">Role Name</label>
                                    <input type="text" class="form-control" name="app_name" required>
                                </div>
                                <div class="form-group">
                                    <label for="Type">App Name</label>
                                    <input type="text" class="form-control" name="app_type" required>
                                </div>

                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="ni ni-fat-remove"></i></button>
                            <button type="submit" class="btn btn-primary"><i class="ni ni-check-bold"></i></button>
                        </div>
                        </form>
                    </div>
                </div>
            </div> --}}

            <table class="table table-striped" id="app">
                <thead>
                    <tr>
                        <th scope="col">Role Name</th>
                        <th scope="col">App Name</th>
                        <th scope="col">Action</th>
                        <th scope="col">Action</th>
                    </tr>
                </thead>
                <tbody id="dynamic-row">

                </tbody>
            </table>
            {{-- @foreach ($app as $p)
            <div class="modal fade" id="modal_edit_{{$p->id}}" tabindex="-1" role="dialog" aria-hidden="true">
                <div class="modal-dialog modal-dialog-centered" role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title" id="exampleModalLongTitle">Edit App</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                        <form id="app_form_{{$p->id}}" action="{{ url('update', [$p->id]) }}" method="POST">
                        <input type="hidden" name="_token" value="{{ csrf_token() }}" form="app_form_{{$p->id}}" />

                                <div class="form-group">
                                    <label for="username">Name App</label>
                                    <input type="text" class="form-control" name="app_name" value="{{$p->app_name}}">
                                </div>
                                <div class="form-group">
                                    <label for="Type">Type App</label>
                                    <input type="text" class="form-control" name="app_type" value="{{$p->app_type}}">
                                </div>

                                <div class="form-group">
                                    <label for="name">Description</label>
                                    <input type="text" class="form-control" name="description" value="{{$p->description}}">
                                </div>

                                <div class="form-group">
                                    <label for="text">Nama Menu</label>
                                    <input type="text" class="form-control" name="menu_name" value="{{$p->menu_name}}">
                                </div>
                                <div class="form-group">
                                    <label for="phone">URL Menu</label>
                                    <input type="text" class="form-control" name="menu_url" value="{{$p->menu_url}}">
                                </div>

                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary" data-dismiss="modal"><i class="ni ni-fat-remove"></i></button>
                            <button type="submit" form="app_form_{{$p->id}}" class="btn btn-primary"><i class="ni ni-check-bold"></i></button>
                        </div>
                        </form>
                    </div>
                </div>
            </div>
            @endforeach --}}

            @foreach ($app as $p)
            <div class="modal fade" id="modal_hapus_{{$p->id}}" tabindex="-1" role="dialog" aria-hidden="true">
                <div class="modal-dialog">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title">Data akan dihapus</h5>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">&times;</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            Data yang dihapus tidak dapat dikembalikan!
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-success" data-dismiss="modal"><i class="ni ni-fat-remove"></i></button>
                            <a href="{{ url('roleapp/delete', [$p->id]) }}" class="btn btn-danger"><i class="ni ni-check-bold"></i></a>
                        </div>
                    </div>
                </div>
            </div>
            @endforeach
        </div>
    </div>
</div>

<link  rel="stylesheet" href="{{ asset('css/breadcrumb.css') }}">

<script>

    //load search, individual or not
    var row = 0;

        $(document).ready(function() {


            $('#app thead tr').clone(true).appendTo( '#app thead' );
    $('#app thead tr:eq(1) th').each( function (i) {
        if (row < 2) {
            var title = $(this).text();
            $(this).html('<input type="text" placeholder="Search ' + title + '" />');
        } else {
            $(this).html('');
        }
        row++;
        $( 'input', this ).on( 'keyup change', function () {
            if ( table.column(i).search() !== this.value ) {
                table
                    .column(i)
                    .search( this.value )
                    .draw();
            }
        } );
    } );

    //load datatable processing, using serverside yajra, with pagination option, also action button as well

    var table =   $('#app').DataTable({

            "processing": true,
            "serverSide": true,
            "ajax": "{{ route('ajaxdata.getroleapp') }}",
            "lengthMenu" : [[20, 50, 100, 500, 1000, -1],[20, 50, 100, 500, 1000, "All"]],
            "columns":[
                { "data": "name" },
                { "data": "app_name" },
                {
                    sortable: false,
                    "render": function ( data, type, full, meta ) {
                        return '<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal_edit_'+full.id+'"><i class="ni ni-single-02"></i></button>';
                    }
                },

                {
                    sortable: false,
                    "render": function ( data, type, full, meta ) {
                        return '<button type="button" class="btn btn-danger" data-toggle="modal" data-target="#modal_hapus_'+full.id+'"><i class="ni ni-fat-delete"></i></button>';
                    }
                },

        ],
     });





} );
    </script>

    @endsection

这里是问题,我想加载bas_role_app的列ID,因此可以更轻松地完成任务。但是当我执行dd($ app);时,它总是返回结果,例如:

+"id": 4
  +"app_name": "app"
  +"app_type": null
  +"description": "display app"
  +"menu_name": "app"
  +"menu_url": "/app"
  +"menu_parent_id": null
  +"role_id": 4
  +"app_id": 7
  +"priv_access": "N"
  +"priv_insert": "N"
  +"priv_delete": "N"
  +"priv_update": "N"
  +"priv_export": "N"
  +"priv_print": "N"
  +"name": "siswa"
  +"remark": "study"

据此,我知道查询为进程加载了错误的ID,因为在bas_role_app中,它已达到约1100 id(虚拟数据正在发生...。)

所以我的问题是,如何加载bas_role_app的ID,以便可以在view foreach循环中使用它(而不是bas_role和bas_app的ID),并且也可以执行crud?

2 个答案:

答案 0 :(得分:0)

尝试为您要选择的id列选择一个列别名,如下所示:

$app = DB::table('bas_role_app')
        ->join('bas_role_app','bas_app.id','=','bas_role_app.app_id')
        ->join('bas_role','bas_role_app.role_id','=','bas_role.id')
        ->from('bas_app')
        ->select('bas_app.*,bas_role_app.id as bas_role_app_id')

答案 1 :(得分:0)

没关系,显然,我必须使用display和getroleapp方法添加相同的查询,我应该更加小心