【问题标题】:Printing number of rows in Laravel在 Laravel 中打印行数
【发布时间】:2020-09-17 06:05:40
【问题描述】:

我正在尝试从 MySQL 打印 Laravel 中的行数,但出现此错误: htmlspecialchars() 期望参数 1 是字符串,给定对象(视图: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;

        }

profile.blade.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

【问题讨论】:

  • as $d2) 但打印$d。你确定吗?
  • 我已将其替换为 $d2 并得到相同的错误。

标签: php sql laravel


【解决方案1】:

在第二行

@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 查询。

【讨论】:

  • 我已将其替换为 $d2 并得到相同的错误。
  • 您的解决方案非常适合我!为什么你认为我应该使用 Eloquent 而不是手动 SQL?谢谢。
  • 请查看此答案stackoverflow.com/a/40897636/13642447 一次。
【解决方案2】:

DB::select 返回一个结果数组。你应该使用

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

不过,更优雅的做法如下:

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

find方法返回模型中主键等于$id的第一行

【讨论】:

    【解决方案3】:

    Number of friends: {{ $d }} 应该是Number of friends: {{ $d2 }}

    我建议对您的代码进行以下更改:

    1. UserModel 重命名为 User
    2. 添加Friend型号
    3. User模型和Friend模型之间添加一对多的雄辩关系
    4. 将表名 user_friend 重命名为 user_friends - 这样你就可以利用 laravel 的魔力了
    5. dtdt2 不是描述性的 - 我不知道它们代表什么,我建议将它们重命名为: 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(),
        ]);
    
    }
    

    刀片文件看起来类似于:

     <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 }}
    

    【讨论】:

    • 我已将其替换为 $d2 并得到相同的错误。
    • 我建议根据我的评论进行重构。 $d2 是数据所在的位置,如果您在控制器中执行 dd($dt2),您将看到 $dt2 包含的内容
    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2017-01-18
    • 2015-01-16
    • 1970-01-01
    • 2015-09-30
    • 2019-04-20
    相关资源
    最近更新 更多