Как посчитать значение цикла foreach? - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю свой первый проект laravel и хочу получить информацию из таблицы sql 'nutrition' и подсчитать результаты для каждого пользователя.Я вывожу 'свою' таблицу пользователей и мой ***. Blade.php (файл темы), используя foreach.Я хочу сделать что-то, что считает значение для каждого пользователя.

Моя функция внутри контроллера:

public function nutrition() {
       $id = Auth::User() -> id;
        $users = DB::SELECT('SELECT * FROM clients WHERE tr_id = ?', ["$id"]);
        return view('mitybos-valdymas', compact('users'));
}

Мой маршрут:
Route::get('/mityba', 'HomeController@nutrition');

Внутри ***. Blade.php

  @foreach ($users as $user)
    {{ $user->name }}
  @endforeach

Пример того, что я хочу сделать в laravel (не php):

$sql = mysqli_query($conn, "SELECT * FROM clients WHERE tr_id = 1");
while ($row = mysqli_fetch_array($sql)) {  
      $u_id = $row['id'];  
      $name = $row['name'];  
      $sql2 = mysqli_query($conn, "SELECT * FROM nutrition WHERE user = '$u_id'");  
      $count = mysqli_num_rows($sql2);    
      echo "User name - " . $name. " / RESULT - " . $count;   
}  

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Попробуйте, если я прекрасно понял ваш вопрос:)

// Маршрут

Route::get('/mityba', 'HomeController@nutrition');

// Homecontroller @ nutrition

public function nutrition() {
     $authId = Auth::id();
     $users = DB::table('clients')->where('tr_id', $authId)->get(); //sql1
     return view('mitybos-valdymas', compact('users'));
}

// внутри mitybos-valdymas.blade.php , проверьте эту ссылку используйте PHP в Blade

@php
  $count = 0; //Initialize variable
@endphp
@foreach ($users as $user)
  $count += 1;
  $result = DB::table('nutrition')->where('user', $user->id)->get() //sql2
  echo "User name - " . $result->name. " / RESULT - " . $count;   
@endforeach

За твой покой в ​​кодировке:)

0 голосов
/ 17 августа 2019

Это еще один способ сделать это, поэтому он будет начинаться с 0 до количества пользователей

 @foreach ($users as $index => $user)
   {{ $index }}
 @endforeach
0 голосов
/ 19 декабря 2018

В идеале вы должны создать Nutrition Eloquent модель и использовать функции отношений Laravel .Но если вы не можете / не хотите, то создайте свой собственный.

    // In app/User.php
    public function nutritions()
    {
        return DB::table('nutrition')->where('user',$this->id);
    }

Тогда:

    // In blade view
    @foreach ($users as $user)
        {{ $user->nutritions()->count() }}
    @endforeach

PS вы можете использовать методы фасада DB для выборакак я делал выше, вместо того, чтобы писать необработанные запросы.

Если вы исправите свои таблицы и используете Eloquent для Nutrition, тогда это будет так просто:

    // In app/User.php
    public function nutritions()
    {
        return $this->hasMany('App\Nutrition','user');
    }

Примечаниечто если вы пойдете по маршруту Eloquent, то стоило бы изменить схему БД на использование соглашения об именах Laravel, например, ваши User должны храниться в таблице с именем users, а ваша таблица nutrition станет nutritions сuser_id в качестве внешнего ключа.

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