mysql - 从数据透视表 laravel 中检索数据(计数等(用户数据))
问题描述
我有下表,我想检索喜欢评论的用户喜欢的每个评论的数量(类似于 Instagram 评论,任何人都可以喜欢其他用户的评论)
用户表 |
---|
ID |
姓名 |
问表 |
---|
ID |
标题 |
评论表 |
---|
ID |
ask_id |
用户身份 |
文本 |
comment_like 表 |
---|
ID |
comment_id |
用户身份 |
它用于保存评论链接,它看起来像 Instagram 评论,任何用户都可以喜欢另一个用户的评论。
这是我的用户模型代码:
class User extends Authenticatable
{
public function comments_like()
{
return $this->belongsToMany(
Comment::class,
'comment_like' ,
'user_id' ,
'comment_id' ,
'id',
'id'
);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
这是我的询问模型代码:
class Ask extends Model
{
use HasFactory;
protected $table = 'asks';
protected $fillable = ['title'];
public function comments()
{
return $this->hasMany(Comment::class);
}
}
这是我的用户模型代码:
class User extends Authenticatable
{
public function comments_like()
{
return $this->belongsToMany(
Comment::class,
'comment_like' ,
'user_id' ,
'comment_id' ,
'id',
'id'
);
}
public function comments()
{
return $this->hasMany(Comment::class);
}
}
这是我的评论模型代码:
class Comment extends Model
{
//user relation
public function user()
{
return $this->belongsTo(User::class);
}
//ask relation
public function ask()
{
return $this->belongsTo(Ask::class);
}
//comment_like relation
public function users_like ()
{
return $this->belongsToMany(
User::class ,
'comment_like',
'comment_id',
'user_id',
'id',
'id'
)
->withTimestamps();
}
//condition on comment_like relation
public function user_like_byId($id)
{
return $this->belongsToMany(
User::class ,
'comment_like',
'comment_id',
'user_id',
'id',
'id'
)
->where('id',$id)->get();
}
}
我想用他们的评论检索最新的询问,其中包括 comment_like 的计数和数据**
我使用了这段代码,但它显示错误
$ask= Ask::query()->latest('id')->get()->first();
foreach ($ask->comments()->get() as $commentItem) {
echo "id: ".$commentItem->id .'<br>';
echo "name :" .$commentItem->user()->pluck('name')[0] . "<br>";
echo "text :" .$commentItem->text . "<br>";
echo $commentItem->user_like_byId($commentItem->id);
}
解决方案
您可以为获取的数据创建资源php artisan make:resource AskResource
并使用count()
函数获取数据长度。
推荐阅读
- vue.js - Capacitor / Ionic / Vue 本地通知事件监听器
- python - 多显示器设置 pyautogui 上的屏幕截图
- vue.js - PhpStorm + vue.js 格式
- ios - 如何修复 XCode 11.7 错误不支持的 iOS 13.6?
- python - focusIn 和 focusOut 事件类型是什么意思?
- javascript - react-full-page 阻止我的页面以特定 ID 打开,例如 http://localhost:3000/#someIdWhereIWantThePageToBeOpened
- node.js - Angular 7、Node JS、IIS、pm2、ERR_CONNECTION_RESET 上传大文件时
- powershell - 使用十六进制值调用 WebRequest
- android - 使用Kotlin单击editText时如何修复NestedScrollView
- opencv - OpenCV 声称找到“错误”的 cuda 版本