在 Laravel 中打印行数

Posted

技术标签:

【中文标题】在 Laravel 中打印行数【英文标题】:Printing number of rows in 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 并得到相同的错误。 【参考方案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?谢谢。 请查看此答案***.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

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

    UserModel 重命名为 User 添加Friend型号 在User模型和Friend模型之间添加一对多的雄辩关系 将表名 user_friend 重命名为 user_friends - 这样你就可以利用 laravel 的魔力了 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 包含的内容

以上是关于在 Laravel 中打印行数的主要内容,如果未能解决你的问题,请参考以下文章

计算laravel中查询返回的行数

有没有办法根据 laravel 中相同模型中的值获得不同的值以及行数?

Laravel count 中的行数有很多关系

如何将 Sql 行数据传递给 Vue 文件(Laravel 项目)

Laravel 查询生成器按天计算行数 SQL db::raw

Laravel Eloquent 播种机计算每个外键的行数