Стол присоединения Laravel В сочетании с запросом JQuery и AJAX - PullRequest
0 голосов
/ 10 марта 2020

Я хочу присоединиться к некоторым таблицам и получить данные для отображения в таблицах данных. Я недавно использую таблицы данных yajra.

Вот список таблиц, к которым я хочу присоединиться:

  1. экспедиция: id, client_id, org_id, expedisi_id, expedisi_name, status, created_at, updated_at
  2. клиенты: id, client_id, client_name, status, created_at, updated_at
  3. организации: id, org_id, org_name, org_address, status, created_at, updated_at

ПРИМЕЧАНИЕ: id just for indexing, AUTO INCREMENT

Итак проблема в том, что я хочу присоединиться ко всем таблицам выше, я хочу отобразить client_name и org_name вместо отображения client_id и org_id в таблицах данных. Я получаю сообщение об ошибке, если я не использую $ ekspedisi = Ekspedisi :: all () для получения определенных данных в EkspedisiController. php:

DataTables warning: table id=ekspedisis-table - Ajax error. For more information about this error, please see http://datatables.net/tn/7

Вот мой table.blade. php НА РАЗДЕЛЕ СКРИПТА

@push('scripts')
<script type="text/javascript">

    var table = $('#ekspedisis-table').DataTable({
        processing: true,
        serverSide: true,
        ajax: 'ekspedisi.json',
        columns: [
            { data: 'id', name: 'id' },
            { data: 'expedisi_id', name: 'expedisi_id' },
            { data: 'client_id', name: 'client_id' },
            { data: 'org_id', name: 'org_id' },
            { data: 'expedisi_name', name: 'expedisi_name' },
            { data: 'status', name: 'status'},
            {
                data: 'action', name: 'action', orderable: false, searchable: false
            }
        ]
    });


    function deleteEkspedisi(id){
        var popup = confirm("Are you sure for delete this data?");
        var csrf_token = $('meta[name="csrf-token"]').attr('content');
        if(popup == true){
            $.ajax({
                url     : "{{ url('ekspedisi') }}/"+id,
                type    : "POST",
                data    : { '_method':'DELETE', '_token': csrf_token, 'id':id },
                success : function(data){
                    table.ajax.reload();
                },
                error   : function(){
                    alert('Opps: Something Wrong!');
                }
            });
        }
    }

</script>
@endpush

EkspedisiController. php

public function json(){

        // $ekspedisi = Ekspedisi::all();
        $ekspedisi = DB::table('ekspedisis')
                     ->join('clients', 'clients.client_id', '=' ,'ekspedisis.client_id')
                     ->join('organizations', 'organizations.org_id', '=', 'ekspedisis.org_id')
                     ->select('ekspedisis.*', 'clients.client_name', 'organizations.org_name') 
                     ->get();

        return Datatables::of($ekspedisi)
            ->addColumn('action', function ($data) {
                return '<a href="/ekspedisi/'.$data->id.'/edit" class="btn btn-xs btn-default"><i class="glyphicon glyphicon-edit"></i> Edit</a>
                        <a onclick="deleteEkspedisi('.$data->id.');" class="btn btn-xs btn-danger"><i class="glyphicon glyphicon-trash"></i> Delete</a>';
            })
            ->editColumn('client_id', function($data){
                return $data->client_name;
            })
            ->editColumn('org_id', function($data){
                return $data->org_name;
            })
            ->make(true);
    }

Экспедици. php (МОДЕЛЬ)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Ekspedisi extends Model
{
    protected $table = 'ekspedisis';

    protected $fillable = [
        'expedisi_id', 'client_id', 'org_id', 'expedisi_name'
        // , 'status'
    ];

    public function client()
    {
        return $this->belongsTo(Client::class);
    }

    public function organization()
    {
        return $this->belongsToMany(Organization::class);
    }
}

Клиент. php (МОДЕЛЬ)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Client extends Model
{
    protected $table = 'clients';

    protected $fillable = [
        'client_id', 'client_name'
        // , 'status'
    ];

    public function ekspedisi()
    {
        return $this->hasMany(Ekspedisi::class);
    }
}

Организация. php (МОДЕЛЬ)

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Organization extends Model
{
    protected $table = 'organizations';

    protected $fillable = [
        'org_id', 'org_name', 'org_address'
    ];

    public function ekspedisi()
    {
        return $this->hasMany(Ekspedisi::class);
    }
}

web. php (МАРШРУТЫ)

...
Route::resource('ekspedisi', 'EkspedisiController');
Route::get('ekspedisi.json', 'EkspedisiController@json');
...

ПРИМЕЧАНИЕ: I'm using Laravel 5.8, PostgreSQL

1 Ответ

0 голосов
/ 10 марта 2020

Я решил проблему, но я все еще не знаю, почему она работает, если кто-то может объяснить, пожалуйста, оставьте свой комментарий :), я изменяю на:

EkspedisiController. php

$ekspedisi = Ekspedisi::join('clients', 'clients.client_id', '=' ,'ekspedisis.client_id')
                     ->join('organizations', 'organizations.org_id', '=', 'ekspedisis.org_id')
                     ->select('ekspedisis.*', 'clients.client_name', 'organizations.org_name') 
                     ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...