2016-08-19 4 views
0

Я пытаюсь обновить сводную таблицу approve_document, где у него есть дополнительная колонка isApprove с использованием метода ->withPivot.updateExistingPivot не работает

Модель:

Документ

class Document extends Model 
{ 
    public function sentToApprovers() 
    { 
    return $this->belongsToMany('App\Models\Approve', 'approve_document')->withPivot('isApprove'); 
    } 
} 

Утвердить

class Approve extends Model 
{ 
    public function createdpendingDocuments() 
    { 
    return $this->belongsToMany('App\Models\Document', 'approve_document')->withPivot('isApprove'); 
    } 
} 

Это где я получаю все мои записи в моей approve_document.

Контроллер:

public function documentsSentForApproval() 
{ 
    $pendingDocumentLists = DB::table('approve_document') 
    ->select('documents.title', 'documents.content', 'categories.category_type', 'users.username', 'approve_document.dateReceived', 'documents.id', 'approves.approver_id') 
    ->join('documents', 'documents.id', '=', 'approve_document.document_id') 
    ->join('categories', 'categories.id', '=', 'documents.category_id') 
    ->join('approves', 'approves.id', '=', 'approve_document.approve_id') 
    ->join('users', 'users.id', '=', 'approves.approver_id') 
    ->where('approver_id', '=', Auth::id()) 
    ->orWhere('requestedBy', '=', Auth::id()) 
    ->get(); 


    return view ('document.pending') 
    ->with('pendingDocumentLists', $pendingDocumentLists); 
} 

Вид:

@foreach ($pendingDocumentLists as $list) 
    <tr class = "info"> 

     <td>{{ $list->title }}</td> 
     <td>{{ strip_tags(substr($list->content, 0, 50)) }} {{ strlen($list->content) > 50 ? "..." : '' }}</td> 
     <td>{{ $list->category_type }}</td> 
     <td>{{ $list->username }}</td> 
     <td>{{ date('M, j, Y', strtotime($list->dateReceived)) }}</td> 
        <td> 

      @if (Auth::id() == $list->approver_id) 

       <a href = "{{ route ('document.pending', $list->id) }}"> 
        <button type = "submit" class = "btn btn-success glyphicon glyphicon-thumbs-up"> Approve</button> 
       </a> 

      @endif 

     </td> 
     <td></td> 

    </tr> 
@endforeach 

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

Эта часть контроллера, с которой мне трудно обновлять сводную таблицу. Это дает мне ошибку MethodNotAllowedHttpException. Любые советы или помощь были бы очень признательны!

public function updateIsApprove($id) 
{ 
    $document = new Document(); 

    foreach ($document as $update) 
    { 
     $approve = new Approve(); 

     $document->sentToApprovers()->updateExistingPivot([$approve->id => ['isApprove' => '1']],false); 
    } 


    return redirect()->route('document.pending'); 
} 

маршруты:

Route::post('/documents/pending/approve/{id}', 
[ 
    'uses' => '\App\Http\Controllers\[email protected]', 
    'as' => 'document.pending', 
]); 

ответ

0
public function updateExistingPivot($id, array $attributes, $touch = true) 

Первый Parametr должен быть идентификатор соответствующей вещи.

+0

Возможно ли это? Я ничего не нашел в документации Laravel. – Francisunoxx

+0

Требуется. Посмотрите на мой пример: $ comany-> members() -> updateExistingPivot ($ member-> id, ['is_admin' => true]); – Vuer

+0

Я не видел ничего плохого с вашим кодом, но я пробовал следовать, но ничего не происходит, он не обновляется в моей сводной таблице. – Francisunoxx

0
public function updateIsApprove($documentId, $approveId) 
{ 
$document = Document::find($documentId); 

if (!$document) { 
    // Handle error that document not exists. 
} 

$approve = $document->sentToApprovers()->find($approveId); 

if (!$approve) { 
    // Handle that approve not exists or is not related with document. 
} 

$document->sentToApproves()->updateExistingPivot($approve->id, ['isApprove' => 1]); 

return redirect()->route('document.pending'); 
} 
+0

У меня ошибка, я думаю, что что-то пропустил?В нем говорится: «Отсутствует аргумент 2 для приложения \ Http \ Controllers \ DocumentController :: updateIsApprove()« Какие аргументы я здесь отсутствует? – Francisunoxx

+0

У вас нет аргумента 2: D Вам нужно указать его в маршруте. – Vuer

+0

Мой маршрут выглядит так. 'Route :: get ('/ documents/pending/approve/{id}', [ \t 'uses' => '\ App \ Http \ Controllers \ DocumentController @ updateIsApprove', \t 'as' => 'document .pending ', ]); «Я что-то пропустил? – Francisunoxx

0

MethodNotAllowedHttpException не для вашего контроллера, но для Route. Как вы можете видеть, в вашем файле маршрутов у вас есть Route для обработки запроса POST, но, на ваш взгляд, вы делаете запрос GET, обратившись непосредственно к URL-адресу.
Итак, просто измените маршрут POST на GET в вашем файле маршрутов.

Route::get('/documents/pending/approve/{id}', 
[ 
    'uses' => '\App\Http\Controllers\[email protected]', 
    'as' => 'document.pending', 
]); 
Смежные вопросы