2017-07-21 44 views
2

我正在關注laravel教程,並創建了一個表單,以便使用user_id創建對帖子的評論。我似乎無法理解我如何傳遞user_id。發送用戶ID和發帖ID

Post模型

class Post extends Model 
{ 
    protected $guarded = []; 

    public function comments() 
    { 
    return $this->hasMany(Comment::class); 
    } 

    public function addComment($body) 
    { 
    $this->comments()->create(compact('body')); 
    } 

    public function user() 
    { 
    return $this->belongsTo(User::class); 
    } 
} 

Comment模型

class Comment extends Model 
{ 
    protected $guarded = []; 

    public function post() 
    { 
     $this->belongsTo(Post::class); 
    } 

    public function user() 
    { 
     $this->belongsTo(User::class); 
    } 
} 

User模型

class User extends Authenticatable 
{ 
    use Notifiable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function posts() 
    { 
     return $this->hasMany(Post::class); 
    } 

    public function comments() 
    { 
     return $this->hasMany(Comment::class); 
    } 

    public function publish(Post $post) 
    { 
     $this->posts()->save($post); 
    } 

} 

CommentsController.php

class CommentsController extends Controller 
{ 
    public function store(Post $post) 
    { 
     $this->validate(request(), ['body' => 'required|min:2']); 

     $post->addComment(request('body')); 

     return back(); 
    } 
} 

正如你所看到的,我在Post模型中調用->addComment來添加評論。它工作得很好,直到我將user_id添加到Comments表中。什麼是存儲用戶ID的最佳方式?我無法讓它工作。

回答

0

更新您的addComment方法:

public function addComment($body) 
{ 
    $user_id = Auth::user()->id; 
    $this->comments()->create(compact('body', 'user_id')); 
} 

PS:假設用戶進行身份驗證。

UPDATE

public function addComment($body) 
{ 
    $comment = new Comment; 
    $comment->fill(compact('body')); 
    $this->comments()->save($comment); 
} 

沒有savingit創建註釋的新實例,你只需要保存的註釋在後,因爲一個帖子已經屬於用戶

+0

它的工作原理。但是,有沒有更好的方法來做到這一點?例如,我在'user'模型中用'publish function'提交我的文章。它自動獲取user_id。 – twoam

+0

@JustinTime檢查我的更新! – Maraboc

+0

我打電話給未定義的方法Illuminate \ Database \ Query \ Builder :: comments() – twoam

0

有沒有必要手工處理的ID,讓雄辯爲您處理:

$user = Auth::user(); // or $request->user() 
$user->comments()->save(new Comment()); 

more information about saving eloquent models.

+0

如果我這樣做,它開始要求post_id。我該如何處理好口才? – twoam

+0

'新評論()'只是一個示例佔位符。評論對象應該事先創建,您可以使用相同的結構來保存評論到帖子。 – Ali