我需要在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()
答案 0 :(得分:0)
要了解帖子的数量,您必须按如下方式计算查询结果:
$post->likes()->count();
这应该返回1
。
如果您只想触发$post->likes
并获得喜欢的数量,则需要在喜欢的模型中定义一个吸气剂(不建议)。
与此相关的内容
public function __get($key)
{
if ($key === 'likes') {
return $this->likes()->count();
}
return parent::__get($key);
}