我已经花了几个小时试图弄清楚这一点,我希望有人能帮助..问题与1-多Laravel雄辩模型查询
我只是想输出文章的标题与文章的平均等级为每个。我已经建立了数据库表文章和评级来保存数据,在评级表中我有rating_id,primary和article_id作为链接到Articles表[主键]的外键。
我已创建为每个表的模型和文章和评级模型之间的一对多关系:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $table = 'articles';
protected $primaryKey = 'article_id';
/**
* Define a 1-many relationship in eloquent
*/
public function ratings()
{
return $this->hasMany(Rating::class);
}
}
我还设置(等级和文章模型之间的反比关系是实际需要?): - 应该有2条记录返回,这是你的第2个评级
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Rating extends Model
{
protected $table = 'rating';
protected $primaryKey = 'rating_id';
/**
* Define a 1-many inverse relationship in eloquent
*/
public function articles()
{
return $this->belongsTo(Article::class);
}
}
在我的控制,我通过“收视率”属性,其中的article_id = 2调用收视率的集合。代码示例:
public function ShowRating() {
$ratings = Article::find(2)->ratings;
var_dump($ratings);
}
我收到SQL错误,是我的模型关系不正确吗?代码示例:
> QueryException in Connection.php line 647: SQLSTATE[42S22]: Column not
> found: 1054 Unknown column 'rating.article_article_id' in 'where
> clause' (SQL: select * from `rating` where
> `rating`.`article_article_id` = 2 and `rating`.`article_article_id` is
> not null)
一旦我管理了这个阶段,我可以使用avg方法对评分进行平均。
提前道歉 - 我相信这是愚蠢的,但我无法弄清楚。非常感谢..
我是很新的larvel。我很困惑这篇article_article_id从哪里来?你可以尝试在hasMany和belongsTo函数的第二个参数中添加外键。返回$ this-> hasMany(Rating :: class,'rating_id');并返回$ this-> belongsTo(Article :: class,'rating_id'); (它应该是公共领域) – Farsay
在您的Article模型中尝试'返回$ this-> hasMany(Rating :: class,'article_id')'。 –
谢谢Fairsay&Taylor Foster - HasMany方法缺少指定评级表中的外键的参数,在这种情况下,该参数为'article_id'。然而,仍然不完全在那里..使用下面的急切加载我可以得到文章标题和评分数据,但是当我尝试访问rating_score或任何其他特定的字段时,我得到'Property [rating_id]在此收集实例上不存在“。错误。语法错误? $ articles = Article :: all(); ($ articles as $ article){ echo $ article-> ratings-> rating_score; echo $ article-> headline; }' – pfeatherstone