我正在为我的网站创建一个类似的系统。在这个我希望一个用户只能喜欢一次发帖。并且许多用户可以喜欢帖子。也有很多用户可以喜欢很多帖子。
所以,如果我猜对了,这是一个多对多的关系。
在这种情况下, 我创建了下表
...用户表:
id
name
.... 帖子表:
id
post
... post_likes table
ID
user id
poost_id
现在我有
的以下模型用户:
class User extends SentryUserModel {
public function post_likes()
{
return $this->has_many('Post_like', 'id');
}
}
帖子:
class Post extends Eloquent {
public function post_likes()
{
return $this->has_many('Post_like', 'id');
}
}
post_like:
class Post_like extends Eloquent {
public function posts()
{
return $this->belongs_to('Post', 'post_id');
}
public function users()
{
return $this->belongs_to('User', 'user_id');
}
}
现在当我要插入数据库时(对于post_likes表)我收到一个名为
的错误Illuminate \ Database \ Eloquent \ MassAssignmentException
user_id
另外我想知道有没有办法插入数据库,如
$user->like()->save($user); ?????
提前谢谢你。快乐的编码。 \米/
答案 0 :(得分:2)
我将从一个基本问题开始,首先你可能想要确保所有的表都是小写的(仍然是一个蛇案例),这不是必需的,但它最终是如何与Laravel一起使用它所以它让生活更容易与之保持一致。另外一个明智的注释,如类名,数据库表通常是单数的用户而不是用户
其次是的,您可以使用$ user-> post_likes() - > save($辩论)进行插入;因为你在用户类上的post_likes方法返回has_many。
第三,你对Post_like类的设计有点偏差,你最好这样做:
class PostLike extends Eloquent { // note that PostLikes is a more standard naming for a class, they should ideally be camel case names but with all capitals for words
protected $table = 'post_like'; // specifies the table the model uses
public function post() // this should be singular, the naming of a belngs_to method is important as Laravel will do some of the work for you if let it
{
return $this->belongs_to('Post'); // by naming the method 'post' you no longer need to specify the id, Laravel will automatically know from the method name and just adding '_id' to it.
}
public function users()
{
return $this->belongs_to('User');
}
}
第四,你的其他课程可能更好:
class Post extends Eloquent {
public function post_likes()
{
return $this->has_many('PostLike'); // doesn't require you to specify an id at all
}
}
我无法准确地告诉你为什么你会收到大量分配错误,你的帖子有点乱码,看起来你没有包含实际导致异常的代码?我有一种感觉,你是想尝试一次为多个数据库行插入,但没有为PostLike定义一个可填充的数组,例如:http://four.laravel.com/docs/eloquent#mass-assignment
答案 1 :(得分:0)
根据Laravel 5:
用户模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
public function post_likes()
{
return $this->hasMany('App\PostLike');
}
}
发布模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model {
public function post_likes()
{
return $this->hasMany('App\PostLike');
}
}
PostLike模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class PostLike extends Model {
protected $table = 'post_like';
public function posts()
{
return $this->belongsTo('App\Post');
}
public function users()
{
return $this->belongsTo('App\User');
}
}
如果你想保存post_like数据,那么:
$inputs['post_id'] = 1;
$inputs['user_id'] = 4;
$post_like = PostLike::create($inputs);
希望这会有所帮助!!