Количество выводимых строк в Laravel - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь напечатать количество строк в Laravel из MySQL, но получаю эту ошибку: htmlspecialchars () ожидает, что параметр 1 будет строкой, заданным объектом (View: C: \ wamp64 \ www\kont \ resources \ views \ profile.blade. php)

В моей модели есть две функции. Первая функция возвращает информацию о пользователе из одной таблицы, а другая функция подсчитывает количество друзей этого пользователя из другой таблицы. Пожалуйста, посмотрите мой код ниже:

HomeController. php

public function profile(Request $request,$id){
        $model = new UserModel();
 $podaciIzBaze = $model->userdata($id);
 $data = array();
 $data['dt'] = $podaciIzBaze;

$model2 = new UserModel();
 $podaciIzBaze2 = $model2->countfriends($id);

 $data['dt2'] = $podaciIzBaze2;

         return view('profile',$data);

    }

UserModel. php

  class UserModel extends Model
    {
        //
        public function userdata($id){
            $query = DB::select("SELECT first_name,last_name,email,website,birth_date FROM users where id = $id");
            return $query;
        }

        public function countfriends($id){

            $query=DB::SELECT("SELECT count(user_id) from user_friend where user_id = $id");
            return $query;

        }

профиль. Лезвие. php

 @foreach($dt as $d)
                                 <tr>
                                    <td>Ime:</td>
                                    <td>{{ $d->first_name }}</td>
                                 </tr>
                                 <tr>
                                    <td>Prezime</td>
                                    <td>{{ $d->last_name }}</td>
                                 </tr>
                                 <tr>
                                    <td>Datum Rodjenja</td>
                                    <td>{{ $d->birth_date }}</td>
                                 </tr>
                                 <tr>
                                 <tr>
                                    <td>Pol</td>
                                    <td>Musko</td>
                                 </tr>
                                 <tr>
                                    <td>Email</td>
                                    <td><a href="mailto:info@support.com">{{ $d->email }}</a></td>
                                 </tr>
                                 <td>Website</td>
                                 <td>
                                   {{ $d->website }}
                                 </td>
                                 </tr>
                                     @endforeach


                       @foreach($dt2 as $d2)
                     Number of friends: {{ $d }}
                     @endforeach

Ответы [ 3 ]

1 голос
/ 29 мая 2020

Во второй строке

@foreach($dt2 as $d2)
    Number of friends: {{ $d }}  // Here it should be $d2
@endforeach

Это должно быть $ d2 вместо $ d.

Изменить 1

Проблема с вашим вторая функция countfriends ($ id). Используйте следующий код

$query=\DB::select("SELECT count(user_id) as friends from user_friend where user_id = $id");

Затем используйте файл представления:

@foreach($dt2 as $d2)
    Number of friends: {{ $d2->friends }}
@endforeach

Когда вы использовали запрос выбора, он возвращал ключ «count (user_id)», который нельзя было использовать с стандартный объект для печати. ​​

Но вы должны начать использовать Eloquent для запросов вместо написания ручных SQL запросов.

0 голосов
/ 29 мая 2020

Number of friends: {{ $d }} должно быть Number of friends: {{ $d2 }}

Я предлагаю следующие изменения в ваш код:

  1. Переименовать UserModel в User
  2. Добавьте Friend модель
  3. Добавьте красноречивое отношение одного ко многим между User моделью и Friend моделью
  4. Переименуйте имя таблицы user_friend в user_friends - таким образом вы можете использовать Маги laravel c
  5. dt и dt2 не описательны - я понятия не имею, что они представляют, я бы предложил переименовать их в: dt -> userData dt2 -> totalFriends
public function profile(User $user){
    $userData = $user->only([
        'first_name',
        'last_name',
        'email',
        'website',
        'birth_date',
    ]);

    return view('profile', [
        'userData' => $userData,
        'totalFriends' => $user->friends->count(),
    ]);

}

Blade-файл будет выглядеть примерно так:

 <tr>
    <td>Ime:</td>
    <td>{{ $userData->first_name }}</td>
 </tr>
 <tr>
    <td>Prezime</td>
    <td>{{ $userData->last_name }}</td>
 </tr>
 <tr>
    <td>Datum Rodjenja</td>
    <td>{{ $userData->birth_date }}</td>
 </tr>
 <tr>
 <tr>
    <td>Pol</td>
    <td>Musko</td>
 </tr>
 <tr>
    <td>Email</td>
    <td><a href="mailto:info@support.com">{{ $userData->email }}</a></td>
 </tr>
 <td>Website</td>
     <td>
       {{ $userData->website }}
     </td>
 </tr>


 Number of friends: {{ $totalFiends }}
0 голосов
/ 29 мая 2020

DB :: select возвращает массив результатов. Вы должны использовать

$data['dt'] = $podaciIzBaze[0];

Однако более элегантный способ сделать это выглядит следующим образом:

$data['dt'] = UserModel::find($id);

Метод find возвращает первую строку модели, в которой первичный ключ равен $ id

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