Angular - Laravel Получите 5 лучших идентификаторов с наибольшим количеством записей - PullRequest
0 голосов
/ 03 октября 2019

Я разрабатываю клиентское портальное приложение, используя Angular-7 в качестве внешнего интерфейса и Laravel-5.8. У меня есть таблица с именем trips со следующими полями: id, client_id, destination. Я пытаюсь получить 5 лучших пунктов назначения.

DashboardController.php

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Trip;
use App\Client;

class DashboardController extends Controller
{
public function getTopDestination(Request $request)
{
    $user = Auth::user();
    $userClientId = Auth::user()->client_id;
    try{

            if(Auth::user()->client_id == 'ABC')
            {
                $destination = Trip::withCount('trips as destination_count')
                    ->orderBy('destination_count', 'desc')
                    ->take(5)
                    ->get();        
            }
            else 
            {
                $destination = Trip::withCount('trips as destination_count')
                    ->where('client_id', $userClientId)
                    ->orderBy('destination_count', 'desc')
                    ->take(5)
                    ->get();        
            }

        return response()->json($destination, 200);

    }
    catch(QueryException $e)
    {

        $errorCode = $e->errorInfo[1];

        return response()->json($errorCode);
    }
}
}

navdashboard.component.ts

import {dashboard2} from 'src/assets/dist/js/pages/dashboard2.js';
import { Component, OnInit, NgZone } from '@angular/core';
import { ApiService } from 'src/app/shared/services/api.service';
import { TokenService } from 'src/app/shared/services/token.service';
import { RolesCheckService } from 'src/app/shared/services/roles-check.service';
import { SnotifyService } from 'ng-snotify';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';
import {NgbPaginationConfig} from '@ng-bootstrap/ng-bootstrap';
import swal from 'sweetalert2';
import { FormControl } from '@angular/forms';

declare var $;

@Component({
  selector: 'app-navdashboard',
  templateUrl: './navdashboard.component.html',
  styleUrls: ['./navdashboard.component.scss']
})
export class NavdashboardComponent implements OnInit {

topdestination = null;

headers = {     //Token for API Authorization
 'Authorization' : this.token.get(),
 'X-Requested-With' : 'XMLHttpRequest'
}

constructor(
  private pg: NgbPaginationConfig, 
  private token: TokenService, 
  private http: HttpClient, 
  private router: Router,
  private api: ApiService, 
  private zone: NgZone,
  private notify: SnotifyService
) { }

ngOnInit() {

  window.dispatchEvent(new Event('load'));
  window.dispatchEvent(new Event('resize'));

  $(dashboard2);
  document.body.className = 'skin-blue sidebar-mini';

   this.notify.clear();
   this.notify.info("Loading...", {timeout: 0});
   this.api.get('getTopDestination', this.headers).subscribe(
   data => {console.log(data), this.topdestination = data; this.datahandlertopdestination(data)}
  )
 }

 datahandlertopdestination(data){
  console.log(data.data);
  this.notify.clear();
  this.topdestination = data.data;
 }

}

navdashboard.cmponent.html

<div class="row">
<div class="col-xs-12">
  <div class="box">

      <div class="box-body">
          <table id="example2" class="table table-bordered table-hover table-striped table-condesed">
            <thead>
              <tr>
                <th width="5%">#</th>
                <th scope="col">Destination</th>
              </tr>
            </thead>
            <tbody>
              <tr *ngFor="let topdestinations of topdestination; let i = index">
                <td>{{i + 1}}</td>
                <td>{{ topdestinations.destination }}</td>
              </tr>
            </tbody>
          </table>
        </div>
  </div>
 </div>
</div>

Класс модели для поездок - Trip.

Когда я загрузил страницу, я ожидал увидеть пять лучших мест назначения. Но я получил эту ошибку:

сообщение: «Вызов неопределенного метода App \ Trip :: trips ()»

Как мне его решить?

1 Ответ

1 голос
/ 03 октября 2019

Я получил разрешение, когда я изменил API:

public function getTopDestination(Request $request)
{
$user = Auth::user();
$userClientId = Auth::user()->client_id;
try{

        if(Auth::user()->client_id == 'ABC')
        {
       $destination = Trip::select('destination')
     ->selectRaw('COUNT(*) AS count')
     ->groupBy('destination')
     ->orderByDesc('count')
     ->limit(5)
     ->get();      
        }
        else 
        {
       $destination = Trip::select('destination')
     ->selectRaw('COUNT(*) AS count')
             ->where('client_id', $userClientId)
     ->groupBy('destination')
     ->orderByDesc('count')
     ->limit(5)
     ->get();       
        }

    return response()->json($destination, 200);

}
catch(QueryException $e)
{

    $errorCode = $e->errorInfo[1];

    return response()->json($errorCode);
}
}
}

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...