Laravel не может синхронизировать отношения многие ко многим

Я пытаюсь сохранить в своей базе данных, и как часть этого сохранения, я пытаюсь синхронизировать отношения многих со многими, однако я получаю следующую ошибку из моего API,

"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');
}

}

class User extends Eloquent implements UserInterface, RemindableInterface {

use UserTrait, RemindableTrait;

/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';

/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');

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

}

Я запускаю синхронизацию после успешного сохранения,

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);

}}

}

0

Решение

Я долго искал проблему и ничего не видел (сначала смотрел sync как вы предложили) но я посмотрел еще раз и думаю, что проблема не в синхронизации пользователей здесь. Вероятно, проблема заключается в следующем:

if(isset($projects)) {
$organisation->projects()->sync($projects);
}

Вы пытаетесь использовать sync отношения 1 ко многим, потому что вы определили это так:

return $this->hasMany('Project');

Так что либо меняй hasMany здесь в belongsToMany если это отношения многие ко многим (это, вероятно, так) или не использовать sync здесь для $projects потому что это работает только для многих, чтобы многие отношения.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]