0
votes

I can get the current user that logged in. But I don't know how can I passed this into variable. I can the user id by this.

public function getDocuments()
{
    //GETTING ALL THE ID OF THE USERS IN THE DATABASE EXCEPT THE ID OF CURRENT USER.
    $resultRecipient = DB::table('users')->where('id', '!=', Auth::id())->get();


    //GETTING ALL THE CATEGORIES.
    $resultCategory = DB::table('categories')->get();


    //VIEW
    return view ('document.create')->with('resultRecipient', $resultRecipient)->with('resultCategory', $resultCategory);

    if(\Auth::user()->id)
    {
        echo "You get the id";
    }
    else
    {
        echo "Failed";
    }

}

Can anyone tell me how can I sync the current user id when the submit button is submitted. Is there a way how can I attach the id of the user in the sync method?

public function postDocuments(Request $request)
{

    $this->validate($request,
    [
        'title' => 'required|alpha_dash|max:255',
        'content' => 'required',
        'category_id' => 'required',
        'recipient_id' => 'required',
    ]);


    $document = new Document();
                                //Request in the form
    $document->title = $request->title;
    $document->content = $request->content;
    $document->category_id = $request->category_id;

    $document->save();
    $document->recipients()->sync($request->recipient_id, false);

    return redirect()->back();  
}

UPDATE!

According to @Ariful. I can add the instance of Auth::user(); to get the id. But it doesn't return me the id to my pivot table and gives me a error.

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (webdev.document_user, CONSTRAINT document_user_user_id_foreign FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE) (SQL: insert into document_user (document_id, user_id) values (59, 0))

public function postDocuments(Request $request)
{

    $this->validate($request,
    [
        'title' => 'required|alpha_dash|max:255',
        'content' => 'required',
        'category_id' => 'required',
        'recipient_id' => 'required',
    ]);


    $user = Auth::user();
    $document = new Document();
                                //Request in the form
    $document->title = $request->title;
    $document->content = $request->content;
    $document->category_id = $request->category_id;

    $document->save();
    $document->recipients()->sync([$request->recipient_id, $user->id, false]);

    return redirect()->back();  
}

Models:

User Model

class User extends Model implements AuthenticatableContract
{
  public function documents()
  {
    return $this->belongsToMany('App\Models\Document', 'document_user', 'user_id', 'document_id');
   }
}

Document Model:

class Document extends Model
{
  public function recipients()
  {
    return $this->belongsToMany('App\Models\User', 'document_user', 'document_id', 'user_id');
  }
}

Migration:

User migration

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('middle_name');
        $table->string('email');
        $table->string('username');
        $table->string('address');
        $table->string('password');
     });
 }

Documents migration:

public function up()
{
    Schema::create('documents', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->text('content');
        $table->integer('category_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        $table->timestamps();
    });
}

documents_user migration:

 public function up()
 {
    Schema::create('document_user',function (Blueprint $table)
    {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('document_id')->unsigned();

        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->foreign('document_id')->references('id')->on('documents')->onDelete('cascade');

        $table->unsignedInteger('sender_id')->nullable();
        $table->foreign('sender_id')->references('id')->on('users')->onDelete('cascade');


        $table->dateTime('dateReceived')->default(DB::raw('CURRENT_TIMESTAMP'));
    });
 }

Screenshot Database:

SC

UPDATE 2:

I can insert a values on my user_id based on the user's choice in the select list.

This is where the values of the form inserted in the user_id column. I just need to insert the current user in my sender_id so I can determined who send the data.

<div class = "form-group">

        <label for = "recipient_id" class = "control-label">To:</label>

        <select name = "recipient_id[]" multiple class = "form-control" id = "myUserList">

            @foreach ($resultRecipient as $list)
                <option value = "{{ $list->id }}">{{ $list->username }}</option>
            @endforeach

    </select>

</div>

SC

As you can see here I just insert this manually based on the users table data. Still don't have idea how can I insert the current user into sender_id column.

1

1 Answers

1
votes

I believe this should work

$user = Auth::user(); //get current user

$document->recipients()->sync([$user->id]); 

UPDATED Source Link

$document->recipients()->sync( [ $request->recipient_id, $user->id ], false );

As per documentation,

The sync method accepts an array of IDs to place on the intermediate table.

UPDATE 2

$document->recipients()->sync( [ $request->recipient_id => 
                                     ['sender_id' => $user->id] ], 
                                     false );

Your sender_id is not part of your relationship. So you need to add it as extra info.

UPDATE 3

After discussion, this should be your main code

foreach($request->recipient_id as $receipentId){

    $document->recipients()->sync( [ $receipentId => 
                                 ['sender_id' => $user->id] ], 
                                 false );
}

This will loop through your receipent_id array and take each id for sync with the current logged in user as $user->id;