Laravel hasMany返回0

时间:2016-09-05 01:26:02

标签: php laravel laravel-5 eloquent laravel-5.2

我需要在Post和Likes之间创建一个关系。除了我的班级名字之外,我跟着Laracasts的视频教程,但我的工作并没有。 Laracast Video所以我搜索了一下。大多数有此问题的人都返回null或得到错误。当我这样做时,我的返回0。

返回0的代码:

>>> $post = App\Post::first();
>>> $post->likes;
=> 0

但如果我尝试这个,我就可以获得价值。

>>> $post->likes()->get();
=> Illuminate\Database\Eloquent\Collection {#656
     all: [
       App\Like {#657
         id: 2,
         post_id: 1,
         user: "robert",
       },
     ],
   }

我的帖子课程:

namespace App;

use Illuminate\Database\Eloquent\Model;



class Post extends Model
{
  public function likes()
  {
    return $this->hasMany('App\Like');
  }
}

My Like Schema:

Schema::create('likes', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('post_id')->unsigned()->index();
            $table->string('user');
        });

帖子表记录:

id   => 1
text => Lorem Ipsum
user => Joe

喜欢表记录:

id => 1
post_id => 1
user => robert

我该怎么做才能解决这个问题?

编辑:

我一直在玩我的代码,到目前为止看起来$post->likes()->get() 是正确的做法。这将获取该类的实例,并从那里我可以执行$post->likes()->get()->username之类的操作来查看谁喜欢该帖子。 然后,如果我想在一个帖子上显示有多少喜欢,我可以做这样的事情。 $post->likes()->count()

1 个答案:

答案 0 :(得分:0)

要了解帖子的数量,您必须按如下方式计算查询结果:

$post->likes()->count();

这应该返回1

如果您只想触发$post->likes并获得喜欢的数量,则需要在喜欢的模型中定义一个吸气剂(不建议)。

与此相关的内容

public function __get($key)
{
    if ($key === 'likes') {
        return $this->likes()->count();
    }

    return parent::__get($key);
}