Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉雷维尔5万多_Php_Laravel - Fatal编程技术网

Php 拉雷维尔5万多

Php 拉雷维尔5万多,php,laravel,Php,Laravel,我建立了多对多关系,以便可以标记客户机。存储客户端时,我还使用以下方法将标记与它们关联: foreach($tags as $v) { if (!empty($v)) { try { $client->tags()->create(['title' => $v]); } catch (QueryException $e) { // doesn't work for already existing tags :( if (

我建立了多对多关系,以便可以标记客户机。存储客户端时,我还使用以下方法将标记与它们关联:

foreach($tags as $v) {
  if (!empty($v)) {
    try {
      $client->tags()->create(['title' => $v]);
    } catch (QueryException $e) {
      // doesn't work for already existing tags :(
      if ($e-> getCode() == 23000) {
        $tag = Tag::firstOrCreate(['title' => $v]);
        $client->tags()->attach($tag->id);
      } else {
        throw $e;
      }
    }
  }
}
我发现在使用
$client->tags()->create()时会导致重复键错误,因此我必须捕获异常并使用另一种方法来关联客户机和标记

虽然我所拥有的确实有效,但我觉得必须有一种更优雅的方式来实现这一点,但我的Google fu无法找到解决方案。

编辑: 我先前的回答是对哈斯曼的。我道歉。以下是我的正确回答:

只需重新排序您正在做的事情,然后使用
firstOrNew
方法。First或new不会创建,因此在保存模型之前不会分配ID。然后,您可以测试ID,以了解是否需要保存关联。大概是这样的:

$tag = Tag::firstOrNew(['title' => $v]);
if(!$tag->id){
    $tag->save();
    $client->tags()->attach($tag->id);
}

我明白,这似乎不管用;“where子句”中的未知列“client_id”已更新我的答案。我为这个错误道歉。