2016-10-17 7 views
0

デバッグして問題を解決しようとしたが、私は解決策を見つけられませんでした。だから、私を助けてくれることを願っています。デタッチLaravel 5.3

私は、コードのこの小さな作品を持っている:

$removed = false; 
if ($store->persons->contains($person)) { 
    $store->persons()->detach($person); 
    $removed = true; 
} 

var_dump($removed); 

私の問題は、$削除は常に「偽」である理由私は理解できないということです。 $ store-> persons() - > detach($ person)という行にコメントすると、すべて正常に動作し、$削除は "true"になります。なぜこれが起こっているのか理解できませんが、私があなたを助けてくれることを願っています。

public function removePerson(Request $request, $storeId, $personId) 
{ 
    $store = Store::findOrFail($storeId); 
    $person = Cashier::findOrFail($personId); 

    $removed = false; 
    if ($store->persons->contains($person)) { 
     $store->persons()->detach($person); 
     $removed = true; 
    } 

    return response()->json([ 
     'removed' => $removed, 
    ]); 
} 

EDITありがとうございました。

+0

ここにいくつかの情報が欠落しているように感じます。もっとコードを投稿できますか?キャッシャーをどこに呼びますか? –

+0

キャッシャーは誤りでした。私はメソッドの完全なコードを追加しました。ありがとうございました。 –

答えて

1

detacth/attachメソッドは、完全なモデルを引数として取るのではなく、両方とも関連モデルのidを必要とするので、あなたの場合はidをdetachメソッドでexに渡す必要があります。

public function removePerson(Request $request, $storeId, $personId) 
{ 
    $store = Store::findOrFail($storeId); 
    $person = Cashier::findOrFail($personId); 

    $removed = false; 
    if ($store->persons->contains($person)) { 
     $store->persons()->detach($person->id); // or $personId which ever 
     $removed = true; 
    } 

    return response()->json([ 
     'removed' => $removed, 
    ]); 
} 
+0

オブジェクトまたはIDを使用すると、正常に動作します(デタッチ)が、なぜ$ remove doesntがtrueになるのかわかりません。 –

+0

... Laravel 5.3では、detach関数は、パラメータが最初のステップでモデルまたはコレクションのインスタンスであるかどうかをチェックします。そのため、モデルのID、コレクション、IDの配列をパラメータとして指定できます。 –