Как получить данные из Laravel db в googlechart? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу представить свои счета в этой GoogleChart.Я хочу посчитать все идентификаторы из таблицы Новости / Мнения / События и т. Д. Я хочу иметь возможность добавлять номера всех записей из новостей / Мнений / событий и т. Д. Если в таблице «Новости» у меня есть 10 новостей, я хочу их посчитать.и введите его в ['Новости', 'Все новости ЗДЕСЬ'],

И второе, я хочу добавить его в этот код:

<script>
 google.charts.load("current", {packages:["corechart"]});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['News', 'All news HERE'],
          ['Events',    No of events from db],


        ]);

        var options = {
          title: 'My Daily Activities',
          pieHole: 0.4,
        };

        var chart = new google.visualization.PieChart(document.getElementById('donutchart'));
        chart.draw(data, options);
      }
</script>

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Вы можете просто запросить вашу базу данных, чтобы получить все необходимое количество (должно быть быстрым, если вы не запрашиваете много таблиц).

public function myControllerAction() {
    $dbData = DB::selectOne('
        select
        (select count(*) from news) as News, 
        (select count(*) from events) as Events, 
        (select count(*) from someothertable) as Someotherdata 
    ');

    return view('my-view', compact('dbData'));
}

После этого вы можете использовать $ dbData-> News, $ dbData-> Events, $ dbData-> Someotherdata и поместите их в любое место в своем коде.

Вы даже можете упростить свою будущую разработку с помощью Collection Laravel's *.и создание готового к использованию массива для диаграмм Google:


public function myControllerAction() {
    $dbData = DB::selectOne('
        select
        (select count(*) from news) as News, 
        (select count(*) from events) as Events, 
        (select count(*) from someothertable) as Someotherdata 
    ');

    $collection = new \Illuminate\Support\Collection($dbData);
    $data = $collection->flatMap(function($value, $key) {
        // We will use name of the key as the label for chart (News, Events, Someotherdata)
        return [[$key, $value]];
    })->toArray();

    return view('my-view', compact('data'));
}

И просто используйте директиву Blade * @ json , чтобы отобразить json там, где он вам нужен:

<script>
 google.charts.load("current", {packages:["corechart"]});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        // Here is the changed part, notice the @json($data) here
        var data = google.visualization.arrayToDataTable(@json($data));

        var options = {
          title: 'My Daily Activities',
          pieHole: 0.4,
        };

        var chart = new google.visualization.PieChart(document.getElementById('donutchart'));
        chart.draw(data, options);
      }
</script>
0 голосов
/ 25 июня 2019

Я действительно не могу полностью понять, что вы пытаетесь сделать, но я покажу вам всю концепцию в web.php файле маршрута:

   Route::get('/newsCount', 'NewsController@count');

в NewsController.php файле контроллера:

public function count()
    {
        $CountOfNews = News::all()->count(); // Get count of all your news
        // Now you can use one of these two ways 
        // Pass data to view way 1
        return View::make("user/NewsCount", compact('CountOfNews')); 
        // Pass data to view way 2
        return View::make("user/NewsCount")->with(array('Count'=>$CountOfNews));        
    }

и в ваш balde.php файл просмотра вы должны сделать так:

<script>
 alert({{$CountOfNews}});
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...