2016-07-23 1 views
0

Я могу получить текущего пользователя, который вошел в систему. Но я не знаю, как передать это в переменную. Я могу использовать идентификатор пользователя.Как передать переменной метод Auth :: user() и синхронизировать ее в сводную таблицу?

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

} 

Может ли кто-нибудь сказать мне, как я могу синхронизировать текущий идентификатор пользователя при отправке кнопки отправки. Есть ли способ, каким образом я могу присоединить идентификатор пользователя в методе синхронизации?

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

ОБНОВЛЕНИЕ!

Согласно @Ariful. Я могу добавить экземпляр Auth::user();, чтобы получить идентификатор. Но он не возвращает мне идентификатор моей сводной таблицы и дает мне ошибку.

SQLSTATE [23000]: Integrity нарушение ограничения: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается (. webdevdocument_user, скованность document_user_user_id_foreign FOREIGN KEY (user_id) Лит users (id) ON DELETE CASCADE) (SQL: вставить в document_user (document_id, user_id) значения (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(); 
} 

модели:

пользователя Модель

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

Модель документа:

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

миграции:

миграции пользователя

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

Документы миграции:

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 миграция:

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

Database Скриншот:

SC

UPDATE 2:

Я могу вставить значения на моем user_id на основе выбора пользователя в списке выбора ,

Здесь значения формы вставлены в столбец user_id. Мне просто нужно вставить текущего пользователя в мой sender_id, поэтому я могу определить, кто отправляет данные.

<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

Как вы можете видеть здесь, я просто вставить вручную на основе пользователей таблица данных.Все еще не знаю, как я могу вставить текущего пользователя в столбец sender_id.

ответ

1

Я считаю, что это должно работать

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

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

ОБНОВЛЕНОSource Link

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

В соответствии с documentation,

Метод sync принимает массив идентификаторов для размещения на промежуточный Таблица.

UPDATE 2

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

Ваш sender_id не является частью ваших отношений. Поэтому вам нужно добавить его в качестве дополнительной информации.

UPDATE 3

После обсуждения, то это должно быть вашей основной код

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

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

Это будет цикл через receipent_id массив и принимать каждый идентификатор для синхронизации с текущего вошедшего в систему пользователя, как $user->id;

+0

Я не могу получить пользователя 'id' после попадания в submit, который я попытался добавить в свой метод' sync' '$ request-> recipient_id'. Но это говорит 'SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается с ошибкой (' webdev'.'document_user', CONSTRAINT 'document_user_user_id_foreign' FOREIGN KEY (' user_id') Пользователи ССЫЛКИ '(' id') ON DELETE CASCADE) (SQL: вставить в 'document_user' (' document_id', 'user_id') значения (59, 0))' См. мое обновленное сообщение. :) – Francisunoxx

+0

Можете ли вы поделиться своим кодом «recipients()»? –

+0

Я также включил свои миграции. :) – Francisunoxx

 Смежные вопросы

  • Нет связанных вопросов^_^