2016-07-29 63 views
0

我試圖在我的數據透視表中插入belongsTo。我有一個意見文件表具有一對多的關係和評論用戶表具有多對多的關係。數據透視表是comment_userBelongsToMany.php中的ErrorException(非法偏移類型)

我可以插入屬於關聯的關係,但我有一個問題,我需要與用戶id(當前用戶)插入註釋id在一起。看到我下面的關係。

數據庫圖表

DB

模型

評論

class Comment extends Model 
{ 
    protected $tables = 'comments'; 

    protected $fillable = 
    [ 
     'comment', 
     'document_id', 
    ]; 

    public function users() 
    { 
     return $this->belongsToMany('App\Models\User', 'comment_user', 'comment_id', 'user_id'); 
    } 

    public function documents() 
    { 
     return $this->belongsTo('App\Models\Document'); 
    } 
} 

用戶:

class User extends Model implements AuthenticatableContract 
{ 
    use Authenticatable; 

    protected $table = 'users'; 

    protected $fillable = [ 
     'first_name', 
     'last_name', 
     'middle_name', 
     'email', 
     'username', 
     'address', 
     'password', 
     'role_permission_id', 
    ]; 

public function comments() 
{ 
    return $this->belongsToMany('App\Models\Comment', 'comment_user', 'user_id', 'comment_id'); 
} 

} 

控制器:

class CommentController extends Controller 
{ 

    public function postComments(Request $request, Document $id) 
    { 

     $this->validate($request, 
     [ 
      'comment' => 'required', 
     ]); 


     $commentObject = new Comment(); 


     $user = Auth::user(); 

     $commentObject->comment = $request->comment; 

     $id->comments()->save($commentObject); 

     $commentObject->users()->sync(['comment_id' => $commentObject, 'user_id' => $user->id],false); 

     return redirect()->back(); 
    } 
} 

問題

我只是想插入模型評論的id,也是當前用戶。我試過,但它說。

$commentObject->users()->sync(['user_id' => $user->id],false); 

SQLSTATE [23000]:完整性約束違規:1452不能添加或更新子行:外鍵約束失敗(webdevcomment_user,約束comment_user_sender_id_foreign外鍵(sender_id)參考文獻usersid)ON DELETE CASCADE)(SQL:插入comment_usercomment_iduser_id)值(36,11))

正如你可以在這裏看到的是評論的當前ID,並且是登錄用戶的當前ID。任何幫助我怎樣才能做到這一點?

+1

Off-Topic:用戶評論在大多數情況下是1:n關係。所以你可以直接在註釋表中插入user_id,不需要單獨的連接表。 –

+0

並且請將您的表格結構'create table ...'添加到您的問題中,以便我們檢查約束條件。 –

+0

什麼說u-nik是非常重要的,而不是那個題外話題。 '''user-> comments()'''應該是'''hasMany()'''。用戶**具有許多**評論,並且評論**屬於**用戶。你應該這樣做,它會變得更簡單。 –

回答

1

當你這樣做時,你試圖將null放入具有外鍵約束的sender_id中。我假設你還應該添加一個這樣的發件人ID:

$commentObject->users()->sync(['user_id' => $user->id, 'sender_id' => $whatever],false);