Php Laravel无法同步多对多关系
我正在尝试保存到我的数据库,作为保存的一部分,我正在尝试同步我的多对多关系,但是我从API中得到以下错误:Php Laravel无法同步多对多关系,php,database,laravel,relational-database,eloquent,Php,Database,Laravel,Relational Database,Eloquent,我正在尝试保存到我的数据库,作为保存的一部分,我正在尝试同步我的多对多关系,但是我从API中得到以下错误: "BadMethodCallException","message":"Call to undefined method Illuminate\\Database\\Query\\Builder::sync()" 我本以为这是因为我的模型中的关系不是多对多的,所以无法同步,但它们在我看来是正确的 class Organisation extends Eloquent { //Organ
"BadMethodCallException","message":"Call to undefined method Illuminate\\Database\\Query\\Builder::sync()"
我本以为这是因为我的模型中的关系不是多对多的,所以无法同步,但它们在我看来是正确的
class Organisation extends Eloquent {
//Organsiation __has_many__ users (members)
public function users()
{
return $this->belongsToMany('User')->withPivot('is_admin');
}
//Organisation __has_many__ clients
public function clients()
{
return $this->belongsToMany('Client');
}
//Organisation __has_many__ teams
public function teams()
{
return $this->belongsToMany('Team');
}
//Organisation __has_many__ projects
public function projects()
{
return $this->hasMany('Project');
}
}
}
成功保存后,我正在运行同步
if(isset($members)) {
$organisation->users()->sync($members);
}
各位议员当然已定。组织的创建方式如下:
public function create()
{
//
$postData = Input::all();
$rules = array(
'name' => 'required',
);
$validation = Validator::make(Input::all(), $rules);
if($validation->fails()) {
return Response::json( $validation->messages()->first(), 500);
} else {
$organisation = new Organisation;
// Save the basic organistion data.
$organisation->name = $postData['name'];
$organisation->information = $postData['information'];
$organisation->type = 'organisation';
/*
* Create an array of users that can used for syncinng the many-to-many relationship
* Loop the array to assign admins to the organisation also.
*/
if(isset($postData['members'])) {
$members = array();
foreach($postData['members'] as $member) {
if(isset($postData['admin'][$member['id']]) && $postData['admin'][$member['id']] == "on") {
$members[$member['id']] = array(
'is_admin' => 1
);
} else {
$members[$member['id']] = array(
'is_admin' => 0
);
}
}
}
/*
* Create an array of clients so we can sync the relationship easily
*
*/
if(isset($postData['clients'])) {
$clients = array();
foreach($postData['clients'] as $client) {
$clients[] = $client['id'];
}
}
/*
* Create an array of teams so we can sync the relationship easily
*
*/
if(isset($postData['teams'])) {
$teams = array();
foreach($postData['teams'] as $team) {
$teams[] = $team['id'];
}
}
/*
* Create an array of projects so we can sync the relationship easily
*
*/
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($teams)) {
$organisation->teams()->sync($teams);
}
if(isset($teams)) {
$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($organisation, 200);
} else {
return Response::make("Something has gone wrong", 500);
}
}
}
我查找了一段时间,没有发现任何问题。我正在查看您建议的第一次同步,但我再次查看,我认为问题在于没有在此处同步用户。问题可能是:
if(isset($projects)) {
$organisation->projects()->sync($projects);
}
您正在尝试对1对多关系使用同步,因为您是这样定义的:
return $this->hasMany('Project');
因此,如果可能是多对多关系,请将此处的多更改为归属关系,或者不对$projects使用sync here,因为它仅适用于多对多关系。您应该在此处显示什么是$organization。如何创建它。
return $this->hasMany('Project');