当前位置: 首页 > 知识库问答 >
问题:

验证属性为控制器laravel 5.4中的更新功能

宋勇
2023-03-14

我正在用一些电影信息创建这种数据库。

逻辑结构非常简单,一部电影有很多演员,一个演员拍了很多电影,所以这是一种多对多的关系。

我还使用select2library创建了一个简单的输入,其中写入了标记之类的参与者,并用逗号或空格键(此处是指向文档的链接)将它们分隔开,下面是一个简单的快照,以便更好地理解结果

在创建/存储函数中,我不需要检查是否存在任何关系,因为电影是新的。所以我只需要检查演员是否已经存在于数据库中,如果没有保存他们。

我的控制器store()函数看起来像:

foreach ($request->input('actors') as $key => $new_actor) {
  // if actors doesn't exist in the db it save it.
  $check = Actor::where('name', '=', $new_actor)->count();
  if ($check === 0) {
    $actor = new Actor;
    $actor->name = $new_actor;
    $actor->save();
  }
  // Here it creates the relationship
  $actor = Actor::where('name', '=', $new_actor)->first();
  $film->actors()->attach($actor->id);

}

问题

编辑电影时,更改演员,例如删除或添加新演员。我需要在控制器中检查是否存在新的关系,或者是否必须删除一些关系。我怎么做?

这是我的控制器update()函数,当然根本不起作用

foreach ($request->input('actors') as $key => $new_actor) {
  // if actors doesn't exist in the db it save it.
  $check = Actor::where('name', '=', $new_actor)->count();
  if ($check === 0) {
    $actor = new Actor;
    $actor->name = $new_actor;
    $actor->save();
  }
  $actors = $film->actors()->get();
  foreach ($actors as $key => $actor) {
    if ($actor->name === $new_actor) {
      $actor = Actor::where('name', '=', $new_actor)->first();
      $film->actors()->attach($actor->id);
    }
  }
}

谢谢你的帮助。

共有2个答案

仉成益
2023-03-14

好吧我找到路了。第一部分检查是否有新的参与者,如果为真,它将在参与者表中创建一个新行。对于第二部分,检查输入是否有变化,将新数组与保存在数据库中的关系进行比较,这样它就可以检测是否删除了一些参与者,然后也删除了关系。

foreach ($request->input('actors') as $key => $new_actor) {

  // if actors doesn't exist in the db it save it.
  $check = Actor::where('name', '=', $new_actor)->count();
  if ($check === 0) {
    $actor = new Actor;
    $actor->name = $new_actor;
    $actor->save();
  }

  // If the relation doesn't exists it creates it.
  if (!$film->hasActor($new_actor)) {
    $actor = Actor::where('name', '=', $new_actor)->first();
    $film->actors()->attach($actor->id);
  }

  // If the relation has been deleted, it deletes it.
  $actors = $film->actors()->get();
  $new_actors = $request->input('actors');

  foreach ($actors as $key => $actor) {
    $check = in_array($actor->name, $new_actors);
    if ($check === false) {
      $film->actors()->detach($actor->id);
    }
  }

}
万俟靖
2023-03-14

使用雄辩的它并没有直接的方法来做到这一点。但是你可以像这样使用数据库立面

 $actors_film_relation = \DB::table('actor_film')->pluck('actor_id')->unique();

通过现在使用它,您可以获得至少一部电影的演员名单。

删除用户之前,您可以检查actor_id不在$actor_film_relation列表中,如下所示

if( !in_array( $id, $actors_film_realtion))   { $actor->delete(); }

所以现在,与至少一部电影相关的演员不会被删除。

 类似资料:
  • 我有一个spring rest服务,它接受Person对象。Person对象具有名称、电话号码和电子邮件。当添加一个人时,电话号码是强制性的。如果存在电话号码属性,它将使用或或验证是否为空。但是如果属性不存在,验证就不起作用。请建议提供任何验证注释,以检查JSON请求中是否存在该属性。 以下是请求体测试用例 {“name”:“anu”,“phonenumber”:“”,“email”:“test@

  • 我有一个进度条,我试图在控制器的javaFX中更新它。我正在根据一个名为Generate()的函数更新进度条,如果它被调用,它应该更新主控制器内的进度条。但是,我拥有的代码不会更新它,而是更新了进度条的新实例。 我的DrawerContentController中的Generate方法是: 在我的主控制器中,我使用场景构建器通过fxml设置了进度条,我正在尝试从DrawerContentContr

  • 我们正在尝试做一些具有登录屏幕的网站。但是我们有一个问题。我们的域是本地主机/登录/用户。但是,如果用户进入localhost/Home/Index,他/她无需登录即可访问我们的主站点。因此,我们将 [授权] 写入索引控制器。但我不知道我必须使用什么。我是否必须在我们的项目中使用AuthorizeAttribute? 如何访问LoginController/Authentication函数中的索引

  • As we learned earlier in the book, the validate method on a Model is called before set and save, and is passed the model attributes updated with the values from these methods. By default, where we def

  • 晚上好,我正在尝试在下面的场景中使用Hibernate验证器:

  • 我正在使用Spring JDBCTemplate batchUpdate在批中插入数据。我想验证数据是否已成功插入。JDBCTemplate batchUpdate返回一个int[][],那么验证数据是否插入的正确方法是什么? 此链接表示“所有批处理更新方法都返回一个int数组,其中包含每个批处理条目的受影响行数。此计数由JDBC驱动程序报告,并且在这种情况下它并不总是可用,在这种情况下JDBC驱