2013-11-05 56 views
0

我正在爲我的網站創建一個類似的系統。在這個我想要一個用戶只能喜歡一次的帖子。和一個帖子可以被許多用戶喜歡。也有許多用戶可以喜歡很多帖子。喜歡或喜歡有獨特用戶的帖子使用Laravel Eloquent

所以,如果我猜對了,它是一個多對多的關係。

在這種情況下, 我創建下表

...用戶表:

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

先謝謝你。快樂的編碼。 \ m/

回答

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 
    } 
} 

我不能完全告訴你爲什麼你會得到這個質量分配錯誤,你的文章有點亂碼,看起來你並沒有包含實際導致異常的代碼?我有一種感覺是,雖然你試圖在同一時間做了多個數據庫行插入,但還沒有定義類柱可填充的陣列,如在這裏:http://four.laravel.com/docs/eloquent#mass-assignment

+0

謝謝你的真棒回答。這很有幫助。但我仍然陷入了這個問題。就像我根據你改變了事情一樣。 '調用未定義的方法Illuminate \ Database \ Query \ Builder :: has_many()'此錯誤顯示在那裏.. 我已經使用了'$ user1-> post_likes() - > save($ debate);' 將其保存到數據庫。我已經使用過'return $ this-> has_many('Post_Like');' PS:是的,我已經改變了這個詞同時張貼在這裏。我已經在我的數據庫中使用了辯論。 –

+0

Yes解決了這個錯誤'調用未定義的方法Illuminate \ Database \ Query \ Builder :: has_many()',因爲我使用的是LARAVEL 4,它應該是'hasMany()'。 但是我有這個錯誤:傳遞給Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()的參數1必須是Euminate \ Database \ Eloquent \ Model的一個實例,字符串給出,在E:\ xampp中調用\ htdocs \ ffdd \ app \ controllers \ DebatelikesController.php在第72行,並且定義爲' 並且在第72行代碼像這樣'$ user1-> debate_likes() - > save($ debate);' –

+0

congrats,was會說這可能是你把表名稱而不是類。但是,我很高興能夠提供幫助,如果您使用類似於Model :: create(行值數組)的東西,那麼您可能發生MassAssignmentException的原因就是通過它來代替:$ model = new Model(),$模型 - >保存(),這將爲你插入單數 –

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'); 
    } 
} 

類柱型號:

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

希望這有助於!