喜欢或喜欢使用Laravel Eloquent的独特用户的帖子

时间:2013-11-05 07:40:27

标签: php mysql laravel eloquent

我正在为我的网站创建一个类似的系统。在这个我希望一个用户只能喜欢一次发帖。并且许多用户可以喜欢帖子。也有很多用户可以喜欢很多帖子。

所以,如果我猜对了,这是一个多对多的关系。

在这种情况下, 我创建了下表

...用户表:

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); ?????

提前谢谢你。快乐的编码。 \米/

2 个答案:

答案 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);

希望这会有所帮助!!