在 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 的魔力了
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(),
]);
刀片文件看起来类似于:
<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 中相同模型中的值获得不同的值以及行数?
如何将 Sql 行数据传递给 Vue 文件(Laravel 项目)