简体   繁体   中英

updateExistingPivot won't work

I'm trying to update my pivot table approve_document where it has a extra column isApprove using ->withPivot method.

Model:

Document

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

Approve

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

This is where I get all my records in my approve_document .

Controller:

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

View:

@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

You can see here I have a approve button where I need to set isApprove to true when the button is clicked. You can see that I get the current id of the document when the button was clicked.

This part of the Controller where I'm having a hard time updating my pivot table. It gives me a error MethodNotAllowedHttpException . Any tips or help would greatly appreciated!

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

routes:

Route::post('/documents/pending/approve/{id}',
[
   'uses' => '\App\Http\Controllers\DocumentController@updateIsApprove',
   'as' => 'document.pending',
]);
public function updateExistingPivot($id, array $attributes, $touch = true)

第一个参数应该是相关事物的ID。

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

MethodNotAllowedHttpException is not for your controller but is for your Route . As you can see, in your Routes file, you have Route for handling POST request, but in your view you are making a GET request by accessing the URL directly.
So, just change the POST route to GET in your Routes file.

Route::get('/documents/pending/approve/{id}',
[
   'uses' => '\App\Http\Controllers\DocumentController@updateIsApprove',
   'as' => 'document.pending',
]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM