0

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

因此,如果我猜对了,这是多对多的关系。

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

...用户表:

id

name

....帖子表:

id

post

...post_likes 表

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

先感谢您。快乐编码。\米/

4

2 回答 2

2

我将从一个基本问题开始,首先你可能想确保你的所有表格都是小写的(仍然是蛇形的),这不是必需的,但它最终是 Laravel 的预期方式,所以它让生活更轻松坚持下去。也请注意,就像类名一样,数据库表通常是单数的,所以用户而不是用户

其次,是的,您可以使用 $user->post_likes()->save($debate); 进行插入。因为您在用户类上的 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

于 2013-11-05T08:15:54.187 回答
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);

希望这可以帮助!!

于 2016-11-03T06:28:27.910 回答