php - Laravel 数据透视表 - 从反向关系表访问

标签 php mysql laravel-4 eloquent

更新:显然 $problem->userRatings()->count(); 返回 1,因此记录确实存在,但由于某种原因脚本仍然没有进入 foreach 循环。 ..

更新 2/解决方案:我觉得非常愚蠢,但它不起作用的原因是我在调用 foreach($problem->userRatings() as $rating){ 时应该是 foreach($problem->userRatings as $rating){(动态属性)


在我的数据库中,我有 problem_ratings、问题和用户。我有用户和问题的模型,problems_ratings 是问题和用户之间的数据透视表,带有一个额外的“内容”列,用于存储数字评级值 (1-5)。

我的问题模型中的多对多关系:

public function userRatings(){
    return $this->belongsToMany('User', 'problem_ratings', 'author_id', 'problem_id')->withPivot('content');
}

我的用户模型中的多对多关系:

public function problemRatings(){
    return $this->belongsToMany('Problem', 'problem_ratings', 'author_id', 'problem_id')->withPivot('content');
}

在创建 problem_ratings 元素时,我将它附加到我的用户模型,如下所示:

$user->problemRatings()->attach($problem->id, array('content' => $val));

我可以通过用户访问数据透视表,但是当我尝试这样做时:

foreach($problem->userRatings() as $rating){
    echo "In average loop";
    $newAverage = ($rating->pivot->content) + $newAverage;
}

它没有找到任何记录,即使有些记录存在于数据库中。我是否正确使用这些关系?

提前致谢!

最佳答案

在问题模型中,我认为您的关系应该类似于:

public function userRatings(){
return $this->belongsToMany('User', 'problem_ratings', 'problem_id', 'author_id')->withPivot('content');

关于php - Laravel 数据透视表 - 从反向关系表访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27649128/

相关文章:

php - 更改列编码 mysql 以显示为阿拉伯语言

MySQL游标两次获取相同的结果

php - 使用 PHP 从 MySQL 选择并回显单个字段

php - Laravel 4.1 处理多对多关系

php - 防止垃圾邮件发送者在网站上发布不受登录 ID 保护的表单

javascript - JS 到 PHP 套接字?

mysql - Laravel 4 播种口音

php - 在扩展布局的 View 中无法访问 Laravel View Composer 变量

php - 如何在 CakePHP2 中缓存静态内容(css、图像、js 文件)?

php - 如何根据 "enum"列获取分类的 laravel Eloquent 结果并将其显示在一页中?