我在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…
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…