区块链技术博客
www.b2bchain.cn

laravel同步多对多关系 – php程序员分享

D0b2wT.gif

本文介绍了laravel同步多对多关系 – php程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

我在laravel控制器之一中运行以下代码,

$organisation->users()->sync($members); 

但是我似乎从服务器收到以下错误,

{“ error”:{“ type”:“ ErrorException”,“ message”:“ preg_replace():参数不匹配,模式是字符串,而替换是数组”,“ file”:“ / Users / S / Sites / app -api / vendor / laravel / framework / src / Illuminate / Support / helpers.php“,” line“:885}}

我认为这是在抱怨我发送给sync作为参数的形式,这是一个看起来像这样的数组,我认为这是因为我发送的是格式不正确的数组?

要构建我发送到POST中发送的数组的sync I循环的数组,

foreach($postData['members'] as $member) {     if($member['admin'] == 1) {         $members[] = array($member['id'] => array('is_admin' => 1));     } else {         $members[] = array($member['id'] => array('is_admin' => 0));     } } 

我正在尝试发送一个包含键的数组,该键是成员id,然后我也想将一些数据发送到数据透视表,该数据透视表是字段is_admin,值可以为1或0。

如果在运行sync laravel之前返回$members,则返回一些如下所示的JSON,

[     {         "1":{"is_admin":1}     },     {         "85":{"is_admin":0}     },     {         "86":{"is_admin":0}     }  ] 

这是正确的格式吗?难道我做错了什么?

我现在遇到一个新错误,

谢谢这个,我现在收到一个新的错误,调用未定义的方法Illuminate Database Query Builder :: sync()

为了清楚起见,这里是我的关系,

组织

public function users() {     return $this->belongsToMany('User')->withPivot('is_admin'); } 

用户

public function organisations() {     return $this->belongsToMany('Organisation')->withPivot('is_admin'); } 

假设多对多关系具有同步关系,我错了吗?

这是完整的方法,

public function update($id) {        //eturn Input::all('name');     $postData = Input::all();     $organisation = Organisation::find($id);      if(!empty($postData['group_name'])) {         $organisation->name = $postData['group_name'];     } else {         $organisation->name = $postData['name'];     }      $organisation->information = $postData['information'];     $organisation->type = $postData['type'];     $organisation->slug = $this->createSlug($postData['name']);     //Sort out the members are they admins etc.     if(isset($postData['members'])) {          $members = array();          foreach($postData['members'] as $member) {             $members[$member['id']] = array('is_admin' => $member['admin']);         }     }      if(isset($postData['clients'])) {          $clients = array();         foreach($postData['clients'] as $client) {             $clients[] = $client['id'];         }     }      if(isset($postData['projects'])) {          $projects = array();          foreach($postData['projects'] as $project) {             $projects[] = $project['id'];         }     }      if( $organisation->save() ) {          if(isset($members)) {             $organisation->users()->sync($members);         }          if(isset($clients)) {             $organisation->clients()->sync($clients);         }          if(isset($projects)) {             $organisation->projects()->sync($projects);         }          $organisation->load('users');         $organisation->load('teams');         $organisation->load('clients');         $organisation->load('projects');          return Response::make("success", 200);      } else {          return Response::make("Something has gone wrong", 500);      }  } 

参考方案

是的,您的数组结构错误。如果您查看docs(需要向下滚动一点),则id应该是数组的键。像这样:

array(     '1' => array('is_admin' => 1),     '85' => array('is_admin' => 0),     '86' => array('is_admin' => 0), ); 

您可以做一些修改

foreach($postData['members'] as $member) {     if($member['admin'] == 1) {         $members[$member['id']] = array('is_admin' => 1);     } else {         $members[$member['id']] = array('is_admin' => 0);     } } 

你也可以写得更简单

foreach($postData['members'] as $member) {     $members[$member['id']] = array('is_admin' => $member['admin']); } 

PHP:对数组排序 – php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

PHP strtotime困境 – php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00&#0…

PHP-全局变量的性能和内存问题 – php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

PHP PDO组按列名称查询结果 – php

以下PDO查询返回以下结果:$db = new PDO('….'); $sth = $db->prepare('SELECT …'); 结果如下: name curso ABC stack CDE stack FGH stack IJK stack LMN overflow OPQ overflow RS…

php-casperjs获取内部文本 – php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » laravel同步多对多关系 – php程序员分享
分享到: 更多 (0)
D0b2wT.gif

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们