Heim  >  Fragen und Antworten  >  Hauptteil

Laravel-Problem: Problem beim Aktualisieren von hasMany-Beziehungsdatensätzen

<p>Ich habe ein Benutzermodell, das eine hasMany-Beziehung mit einem Markenmodell hat, und ich habe Probleme, die Marke des Benutzers korrekt zu aktualisieren. </p> <p>Ich habe ein Formular, mit dem Benutzer ihre eigene Marke in ein Textfeld eingeben/entfernen/aktualisieren können. Die Methode, die ich derzeit verwende, um die Marke eines Benutzers zu aktualisieren, nachdem der Benutzer die Marke eingegeben oder bearbeitet hat, besteht darin, alle vorhandenen Marken zu löschen mit dem Benutzer, dann die Werte durchlaufen, das Markenmodell erstellen, dann „saveMany“ ... aber ich scheine beim Hinzufügen einen Einschränkungskonflikt zu bekommen ... Ich frage mich, ob es einen besseren Weg gibt, dies zu tun < /p> <p>Mein <code>Benutzer</code>-Modell hat Folgendes;</p> <pre class="brush:php;toolbar:false;">public function brands() { return $this->hasMany('Brands::class'); } </pre> <p>Dann habe ich in meinem Controller den folgenden Code, um die Marke zu aktualisieren;</p> <pre class="brush:php;toolbar:false;">$user->brands()->delete(); foreach ($request['brands'] as $brand) { $brandArray[] = neue Marke([ 'name' => $brand['name'], 'rating' => $brand['rating'], ]); } !empty($brandArray) && $user->brands()->saveMany($brandArray); </pre> <p>Gibt es einen besseren Weg? </p>
P粉054616867P粉054616867437 Tage vor523

Antworte allen(1)Ich werde antworten

  • P粉702946921

    P粉7029469212023-08-31 11:27:59

    让我们将事情分成三个部分:

    # 约束键违规:

    如果您在另一个表上添加了外键约束,并且需要删除品牌,则还应该删除所有受外键约束的相关数据。

    # 设计

    如果无法删除品牌相关数据,那么也许我们可以考虑是否有更好的设计。也许我们可以在前端添加一个钩子,每当用户删除某些数据时调用 DELETE API。

    # 查询

    如果品牌有一些唯一的密钥,您可以使用 upsert 而不是 saveMany。这样效率会更高。

    #结论

    我建议每当用户删除品牌时,通过前端的钩子删除品牌,并使用 upsert 来处理创建和更新内容

    Antwort
    0
  • StornierenAntwort