我对如何在模型中命名我的方法感到困惑。我知道在Laravel Eloquent文档中它假设是Plural但在某些情况下,它给了我错误。例如,我有这个查询:
$posts = Post::with(['comments','user', 'tag'])->findOrFail($id);
然后我打印出这样的结果:
echo "<h1>".$posts->title.'</h1>';
echo "<h2> created by: ".$posts->user->name.'</h2>';
echo "<p>".$posts->body."</p>";
//echo $posts->comments;
echo '<h3>Komentar :</h3>';
foreach ($posts->comments as $comment) {
echo $comment->body.'<br>';
}
echo '<h3>Tags :</h3>';
foreach ($posts->tags as $tag) {
echo '<a href="/tag/'. $tag->id .'">'.$tag->name.'</a><br>';
}
它给我一个错误:
"Call to undefined relationship [tag] on model [App\Post]."
但是当我改变我的&#34;标签&#34;将Post Model中的函数转换为&#34; tag&#34;问题消失了。所以有人可以解释一下这个名称的约定是什么吗?感谢。
有关详细信息,请参阅我的帖子模型:
class Post extends Model
{
/**
* Get the comments for the blog post.
*/
public function comments()
{
return $this->hasMany('App\Comment');
}
public function user(){
return $this->belongsTo('App\User');
}
public function tags(){
return $this->belongsToMany('App\Tag');
}
}
答案 0 :(得分:2)
您似乎在这里使用单数$posts = Post::with(['comments','user', 'tag'])->findOrFail($id);
你在这里使用复数foreach ($posts->tags as $tag) {
尝试在第一个示例中使用复数形式:Post::with(['comments','user', 'tags'])